2014-09-12 116 views
0

我目前正试图让while循环工作,但它不会以我想要的方式。我想要做的是循环,直到一个特定的输入被放入。有些东西一定是我的语法错了,但我无法弄清楚什么。为什么我的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”打印。正如你可能猜到的那样,只要用户输入除float之外的任何东西,输入就变为0,所以如果我输入一个字母,我期待while循环停止,但它不支持; \

编辑:

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

+0

欢迎循环浮点的世界它的永无止境的问题:) – 2014-09-12 20:32:58

+0

你应该检查'scanf'的结果。 – 2014-09-12 20:33:29

+0

谢谢,但是我应该如何重新修改语法以使其突破while循环? – Belphegor 2014-09-12 20:33:40

回答

3

input确实不是如果用户输入非浮点数,则该值变为零。 scanf不会更改该值,也不会消耗任何字符。所以,如果用户输入一个非浮点数,scanf会一直重复读取相同的字符。

您可以测试scanf返回值以查看它是否成功读取任何内容。 scanf返回成功读取域的数量,所以返回值为0意味着它无法解析什么:

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

对,对不起,我打算说解析你的意思,因为我记得如果它没有读取它,它会返回0和1,如果成功。 – Belphegor 2014-09-12 20:37:03

0

写像

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

    } 
相关问题