【问题标题】:How to stop infinite looping the output?如何停止无限循环输出?
【发布时间】:2022-08-24 20:05:53
【问题描述】:

我有一个函数的代码,它从一个数字中返回最大的数字。要求是输入数字,直到输入不是数字的内容。当输入不是数字的东西时,程序应该停止,但在我的例子中,它只是启动一个无限循环,打印函数返回的最后一个结果。这是代码:

#include <stdio.h>
int maxDigit(int n){
    int temp = n, maxDig = 0;
    while(temp){
        int digit = temp % 10;
        if(digit > maxDig){
            maxDig = digit;
        }
        temp /= 10;
    }
    return maxDig;
}
int main()
{
    int n = 1, broj;
    while(n){
    if(scanf(\"%d\", &broj)); 
    printf(\"%d\\n\", maxDigit(broj)); 
    }
    return 0;
}

可能是什么问题?

  • 那是很多 n\'s 到处都是。在 main() 中声明的 n 仅在 main() 的范围内并且永远不会改变。
  • 想想while(n)会在什么条件下停止.
  • \“我一遍又一遍地做同样的事情,没有任何改变——那是怎么回事?\”100 万次迭代后——n 的值是多少?为什么没有改变?

标签: c


【解决方案1】:

您可以查看scanf 的返回值以查看您是否读取了一个有效的整数,并且您可以使用break 来终止您的循环。 main 函数中的 n 变量只有一个常量值,所以我去掉了它,并以其他一些方式清理了函数。这是我的结果代码:

...
int main() {
  while (1) {
    int input;
    if (scanf("%d", &input) != 1) { break; }
    printf("%d\n", maxDigit(input)); 
  }
}

【讨论】:

  • OP 的替代方案,在读取循环上方声明int input;,并使用while (scanf("%d", &amp;input) == 1) { ... } 控制读取循环。除了input. 的范围外,完全相同。尽管通常答案中的版本为scanf() 的所有输入提供了可靠的蓝图。不断循环,直到用户提供所需的输入并处理出现的任何错误,检查匹配失败的返回以及手动EOF
  • 这样可行。谢谢 :)
  • @БојанВасилевски 太好了!请点击复选标记接受我的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-05
相关资源
最近更新 更多