【问题标题】:Strange working cycle in CC中奇怪的工作循环
【发布时间】:2015-10-18 16:01:06
【问题描述】:
int n = 0;
int temp = 0;

while ((temp != 1) || (n <= 0)){
  puts("enter array count");
  temp = scanf("%d", &n);
  printf("\n%d\n", temp);
}

我需要检查输入值是否必须是整数并且大于 0。

scanf 返回成功设置值的计数,如果不是整数,则返回 0。

所以问题是当我输入除数字之外的任何字符时,它会开始未完成的循环

为什么?

【问题讨论】:

  • 阅读 this 并注意返回值的含义。
  • 那么我的错误是什么?我看到零结果,但为什么循环开始并永远执行?
  • @t0mm13b OP 已经知道返回值了。
  • 我几乎无法理解这个错误。好的,我该如何解决?
  • 你可以输入一个实际的数字,然后循环将退出。

标签: c cycle


【解决方案1】:

当您为scanf("%d", &amp;n); 键入无效数据(例如字符)时,scanf 将失败,返回 0,并且将无效数据留在 stdin 中。在下一次迭代中scanfstdin 中看到这个无效数据,再次失败并重复此过程。

解决方法是在循环的每次迭代中清除stdin。添加

int c;
while((c = getchar()) != '\n' && c != EOF);

scanf("%*[^\n]");
scanf("%*c");

就在scanf 之后清除stdin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    相关资源
    最近更新 更多