C 为什么我的while循环是这样的?

C 为什么我的while循环是这样的?,c,C,我目前正试图让一个while循环工作,但它并没有按照我想要的方式进行。我要做的是循环,直到输入一个特定的输入。我的语法一定有问题,但我不知道是什么 #include <stdio.h> int main() { float input = 0; scanf("%f", &input); while(input!=0) { printf("hello\n"); scanf("%f", &input);

我目前正试图让一个while循环工作,但它并没有按照我想要的方式进行。我要做的是循环,直到输入一个特定的输入。我的语法一定有问题,但我不知道是什么

#include <stdio.h>

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

    }
     return 0;
}
#包括
int main()
{
浮点输入=0;
scanf(“%f”,&input);
while(输入!=0)
{
printf(“hello\n”);
scanf(“%f”,&input);
}
返回0;
}
由于某些原因,当它为零时,它不会中断while循环。我希望while循环在有人输入0后停止工作,但当有人输入0时,它将创建一个无限的“hello”打印。正如您可能已经猜到的,每当用户输入除浮点以外的任何内容时,输入都将变为0,因此如果我输入字母,我希望while循环停止,但它不会停止\

编辑:

谢谢你们的帮助!我了解并弄明白了为什么我的逻辑是错误的(因为不了解如何测试scanf的值)!!干杯。

如果用户输入非浮点,则输入不会变为零
scanf
不会更改值,也不会使用任何字符。因此,如果用户输入非浮点数,
scanf
将反复读取相同的字符

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

while(scanf("%f", &input) == 1) {
    printf("You entered %f\n", input);
}
输入
如果用户输入非浮点值,则不会变为零
scanf
不会更改值,也不会使用任何字符。因此,如果用户输入非浮点数,
scanf
将反复读取相同的字符

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

while(scanf("%f", &input) == 1) {
    printf("You entered %f\n", input);
}
像这样写循环

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

    }
像这样写循环

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

    }

欢迎来到浮点世界及其永无止境的问题:)您应该检查
scanf
的结果。谢谢,但是我应该如何修改语法以使其脱离while循环?您可能想阅读,特别是关于它返回的内容的部分,@R.T.:针对零测试浮点实际上应该有效,如果浮点数为零。如果您进行任何计算,您可能无法保证精确的零,但如果您只是输入数字,那么您可以做出保证。欢迎来到浮点世界及其永无止境的问题:)您应该检查
scanf
的结果。谢谢,但是我应该如何修改语法,使其脱离while循环呢?您可能想阅读,特别是关于它返回的内容的部分,@R.T.:如果浮点为零,那么针对零测试浮点实际上应该是可行的。如果你做任何计算,你可能无法保证精确的零,但如果你只是输入数字,那么你可以做出保证。对,对不起,我想说的是你所说的解析,因为我记得如果它读不到它,如果成功,它将返回0和1。对,对不起,我想说的是解析的意思,因为我记得如果它读取失败,如果成功,它将返回0和1。