【问题标题】:Why is my while loop acting this way?为什么我的 while 循环会这样?
【发布时间】:2014-09-12 20:31:35
【问题描述】:

我目前正在尝试让 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 的值)!干杯。

【问题讨论】:

  • 欢迎来到浮点世界及其永无止境的问题:)
  • 你应该检查scanf的结果。
  • 谢谢,但我应该如何修改语法以使其脱离 while 循环?
  • 你可能想阅读this scanf reference,尤其是关于它返回什么的部分,
  • @R.T.:如果浮点数为零,则准确地测试浮点数为零应该实际上可以工作。如果您进行任何计算,您可能无法保证精确为零,但如果您只是输入数字,那么您可以做出此保证。

标签: c


【解决方案1】:

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

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

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

【讨论】:

  • 对了,对不起,我是想说解析的意思,因为我记得如果读取失败,读取成功会返回0和1。
【解决方案2】:

像这样写循环

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

    }

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2012-11-07
    • 2012-10-11
    • 2013-01-28
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多