Когда я запускаю этот код:Flush STDIN (потребляют весь текст и продолжить, когда многострочный наклеена)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static void flush_stdin(void)
{
int c;
while ((c = fgetc(stdin)) != '\n' && c != EOF);
}
static int scand(int *val, int min, int max)
{
char s[32], *p = NULL;
long x = 0;
if (fgets(s, sizeof s, stdin)) {
x = strtol(s, &p, 10);
if (strchr(p, '\n') == NULL) flush_stdin();
}
if (p == NULL || *p != '\n' || x < min || x > max) {
*val = 0;
return 0;
} else {
*val = (int)x;
return 1;
}
}
int main(void)
{
int x;
do {
printf("Number (1-10): \n");
} while (scand(&x, 1, 10) == 0);
printf("Number = %d\n", x);
return 0;
}
И вставить следующий текст:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Я даю этот вывод:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Number (1-10):
Number (1-10):
Number (1-10):
printf("Number (1-10): \n");
обрабатывается для каждой вставки.
Можно ли (смыть) весь текст перед возвратом scand()
, чтобы обработать только один printf
?
@ahnlak Тогда вам придется подождать EOF 'ctrl + D' или' Ctrl + Z' – P0W
Вы правы, конечно - мое плохое, я мысленно думал о сыром режиме. – ahnlak
@ahnlak, 'while ((c = fgetc (stdin))! = '\ N' && c! = EOF);' –