2017-02-09 270 views
0
#include <stdio.h> 

int main() { 
    float change = 0.0; 

    printf("O hai! "); 
    while (change <= 0) { 
     printf("How much change is owed?\n"); 
     scanf("%f\n", &change); 
    } 
    return 0; 
} 

如果输入是负数,结果是无穷无尽的“欠多少变化?”while循环不执行scanf()

+0

无法重现:如果输入负数,我只会发生一次“欠多少变化?”,而不是无穷无尽的系列。 – Evert

+2

它也要求正数的两倍。更改'scanf(“%f \ n”,&change);'==>'scanf(“%f”,&change);' –

+0

步骤1,带有任何'scanf()'问题:测试它的返回值, scanf(“%f”,&change)!= 1)print_ErrorAndQuit()' – chux

回答

1

scanf实际上进入,但由于格式字符串"%f\n"\n,已进入一个数字,scanf等待下一个非空白字符后返回。请注意,格式说明符中的空格允许scanf消耗所有空白字符的序列,而不仅仅是一个,因此只要流提供了空白字符,就会“挂起”。

scanf("%f\n",&change)更改为scanf("%f",&change)

1

当您要求电脑放弃空格时,它如何知道它做了什么?答案:只要它读取不是空白的东西。

你让它在读完一个数字后放弃空格。因此,直到它读取数字然后读取一些非空白字符才会完成。

这真的没有任何意义,因为没有理由任何人输入数字后输入非空白。

这里有一个技巧,虽然这将节省您的痛苦在未来:如果你真正想要做的是读取输入的线然后分析它,使用读取一行的函数,然后一些代码解析输入。