C中的无限循环代码
在下面的程序中,我尝试输入1
到100
之间的数字,但是如果我在scanf()
语句的执行时间内输入'character'
或"string"
(如s或sova
),则会创建一个无限循环。 所以我试着做….当我输入一个字符串或一个字符时,它向我显示了一个消息,例如“输入了错误的值。再次输入”,它将再次输入…
感谢名单;
#include int main() { int a; scanf("%d",&a); while(!(a>=1&&a<=100)) { printf("wrong value entered. enter again\n"); scanf("%d",&a); } printf("you enter %d. Thanxz",a); return 0; }
- 您需要检查
scanf
的返回值 - 如果用户没有输入整数,则需要输入输入。
scanf
函数将不断说不是整数,请再试一次。 因此,如果scanf
返回0,则需要处理它
当您使用scanf时,您正在使用缓冲输入,这意味着当您输入值“123”并按ENTER时,“123”加上结束字符(ENTER)将全部添加到缓冲区。 然后scanf
删除123,因为%d
指定应该读取整数但是如果用户输入的内容像字符串一样无效,则缓冲区将不会被清空。
从键盘读取输入的更好方法是使用fgets(),您可以在其中指定要读取的最大长度。 输入后,您可以使用sscanf()从中检索数值。 ENTER直到那时不会激怒你的输入。
char buffer[128]; fgets( buffer, 128, stdin ); sscanf( buffer, "%d", &a );
还要始终根据经验检查函数的返回值,以便在函数失败时执行适当的操作。
如果scanf的返回值不等于您希望用户输入的项目数,请读取输入缓冲区的所有字符,直到有’\ n’。 但是,不是将一个完整的循环一遍又一遍地复制到代码中用户应该输入内容的位置,而是可以将循环包装在如下函数中:
#include #include #include void input(const char *format,...) { va_list ap; int r; /* number of items [to read] */ int noi=0; for(r=0;r
希望有所帮助,
一月
试试这个。
#include #define FLUSH while (getchar() != '\n') // macro to eat invalid input int main (void) { int a = 0; printf ("Enter an integer: "); scanf("%d", &a); while (a < 1 || a > 100) { FLUSH; printf("Invalid input. Please try again: "); scanf("%d",&a); } printf("You entered %d.\nThanks!\n", a); return 0; }
您的代码显示了需要更改的几种编码习惯:
- 在
main()
的参数列表中包含(void)
main()
。 - 在二元运算符的两边留下空格:
while(!(a>=1&&a<=100))
不必要地丑陋且难以阅读。 - 简化您的逻辑表达式。 为什么使用
(! (a>=1 && a<=100))
当它意味着(a < 1 || a > 100)
,后者更容易阅读? - 需要时提示用户输入。 没有光标只是坐在一条空白行,没有指示用户做什么。
- 在提示中使用正确的语法和大小写。 你的编程没有理由懒惰。
为什么你使用循环,你的逻辑似乎必须有一个if — else条件
while (1) { if (a>=1&&a<=100) { printf("wrong value entered. enter again\n"); scanf("%d",&a); } else { printf("you enter %d. Thanxz",a); return 0; } }