while循环不执行scanf()

时间:2017-02-09 22:32:10

标签: c

#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;
}

如果输入为负数则结果是无穷无尽的&#34;欠了多少变化?&#34;

2 个答案:

答案 0 :(得分:1)

当你要求计算机丢弃空格时,它是如何知道它做了什么的?答:只要它读取的内容不是空格。

你要求它在阅读一个数字后丢弃空格。因此,在读取数字然后读取一些非空格之前,它才会完成。

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

这里有一个提示虽然可以为你节省未来的痛苦:如果你真正想做的是读取输入的然后解析它,使用一个读取一行的函数然后一些用于解析该输入的代码。

答案 1 :(得分:1)

实际上输入了

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

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