我有这个运行一次的代码;然后我输入一些非数字文本并继续打印
输入种子
不执行scanf
代码。
do {
printf("Enter SEED: ");
scanf("%d", &seed);
}
while (!isdigit(seed));
答案 0 :(得分:2)
以前输入的尾随换行符被视为新输入,你需要吃掉它
避免使用scanf
使用fscanf
代替: -
int seed, ch;
do{
printf("Enter SEED: ");
if(fscanf(stdin, "%d", &seed) == 1)
break;
else
while( (ch = getchar()) != '\n' && ch != EOF); //Eat the trailing newline
}while(1);
答案 1 :(得分:1)
如果seed
不是整数,它将保留在输入缓冲区中。 scanf("%d",&seed);
仅从输入缓冲区中获取int
个输入。如果用户输入char
,您将不得不设计一些方法来摆脱缓冲区中的字符。
do {
printf("Enter SEED: ");
scanf("%c", &seed);
}
while (!isdigit(seed)); //isdigit() checks if seed is '1', '2', ... , '9'