为什么我的while循环以这种方式运行?

时间:2014-09-12 20:31:36

标签: c

我目前正试图让while循环工作,但它不是我想要的方式。我想要做的是循环,直到输入一个特定的输入。我的语法肯定有问题,但我无法弄清楚是什么。

#include <stdio.h>

int main()
{
    float input = 0;
    scanf("%f", &input);
    while(input!=0)
    {
        printf("hello\n");
        scanf("%f", &input);

    }
     return 0;
}

由于某种原因,当它为零时,它不会突破while循环。我希望while循环在有人输入0后停止工作,但是当有人输入0时,它将创建一个无限打印“hello”而不是......正如你可能已经猜到的那样,只要用户输入浮动之外的任何内容,输入就变为0,所以如果我输入一个字母,我希望while循环停止,但它不会; \

编辑:

谢谢你们的帮助!我学会并弄清楚为什么我的逻辑错了(由于缺乏理解如何测试scanf的值)!欢呼声。

2 个答案:

答案 0 :(得分:3)

如果用户输入非浮点数,

input 会变为零。 scanf不会更改该值,也不会消耗任何字符。因此,如果用户输入非浮动,scanf将一遍又一遍地读取相同的字符。

您可以测试scanf返回值以查看它是否成功读取任何内容。 scanf返回已成功读取的字段数,因此返回值为0意味着它无法解析任何内容:

while(scanf("%f", &input) == 1) {
    printf("You entered %f\n", input);
}

答案 1 :(得分:0)

一样写循环
    while(input!=0)
    {
        printf("hello\n");
        input = 0.0;
        scanf("%f", &input);

    }