我在C中编写一个程序,要求用户输入3个输入。我使用scanf来获取数字:
printf("Enter the first value: ");
scanf("%lf", &eps);
while(eps < 0){
printf("Epsilon must be positive. Choose a new value: ");
scanf("%lf", &eps);
}
printf("Enter with the second value: ");
scanf("%lf ", &A);
while(A < 0){
printf("A must be positive. Enter with a new value: ");
scanf("%lf", &A);
}
if (A != 0){
printf("Enter the third value: ");
scanf("%lf", &w);
while(w < 0){
printf("w must be positive. Enter with a new value: ");
scanf("%lf", &w);
}
}
问题是,当需要第二个输入时,我输入一个值,我的scanf只是忽略它而且&#34;要求一个新的数字&#34; (我的意思是,如果我输入1,我需要再次输入1以便读取此值)。我已经有一段时间没有使用过C了,但我记得之前我遇到过这个问题,并且在scanf之后使用了像getch()或getchar()这样的问题,所以问题没有发生。我做错了什么?
提前致谢!
答案 0 :(得分:5)
scanf
格式中有一个不幸的额外空格字符:
scanf("%lf ", &A);
这将导致scanf吞下该数字后面的所有空格,包括换行符和下一行中的空格(这意味着它将坚持读取另一行。)
删除空格,它应该可以正常工作。
答案 1 :(得分:4)
这是你的问题:
scanf("%lf ", &A);
// ^-------- This space
引用POSIX:
由一个或多个空格字符组成的指令应通过读取输入执行,直到不能再读取有效输入,或者直到第一个不是空白字符的字节仍未读取。
第一次输入A
值后,需要scanf
才能读取更多输入,直到读取非空白字符为止。因此,您必须在A
值之后输入某些(除了空格)。