scanf读取超过要求

时间:2015-05-31 19:36:34

标签: c

我在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()这样的问题,所以问题没有发生。我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:5)

scanf格式中有一个不幸的额外空格字符:

scanf("%lf ", &A);

这将导致scanf吞下该数字后面的所有空格,包括换行符和下一行中的空格(这意味着它将坚持读取另一行。)

删除空格,它应该可以正常工作。

答案 1 :(得分:4)

这是你的问题:

scanf("%lf ", &A);
       // ^-------- This space

引用POSIX

  

由一个或多个空格字符组成的指令应通过读取输入执行,直到不能再读取有效输入,或者直到第一个不是空白字符的字节仍未读取。

第一次输入A值后,需要scanf才能读取更多输入,直到读取非空白字符为止。因此,您必须在A值之后输入某些(除了空格)。