c - 排除代码段陷入循环的原因

标签 c loops

这段代码在输入字母时不断打印“输入数组值:只能输入数字值”。我不明白为什么它不只打印一次并继续接受输入。理想情况下,用户将重新输入一个或整组值,因此使用仅退出循环的break命令并不理想。任何建议都将不胜感激。

#include <stdio.h>
#include <string.h>

int main(void)
{
 int i, value, containsValues[5];

 for(i=0; i<=4;) {
  printf("Enter array value: \n"); 

  if (scanf("%d", &value) !=1)
   { printf("Only numeric values can be entered \n");} 
  else 
   {containsValues[i] = value; 
    ++i;}
 }

 return 0;
}

编辑:字母是否保留在缓冲区中导致此行为?如果有的话,有什么清除缓冲区的技巧吗?

最佳答案

在错误输入后必须清除输入缓冲区,请使用此 for 循环:它会循环直到输入正确的值

for (i = 0; i <= 4;) 
{
    printf("Enter array value: \n");
    if (scanf("%d", &value) != 1)
    {
        printf("invalid input\n");
        fflush(stdin);
        continue;
    }
    containsValues[i] = value;
    ++i;
}

关于c - 排除代码段陷入循环的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35912293/

相关文章:

c - API 和 "-ldllname"编译器选项的运行时链接

javascript - 我如何调整此 Javascript 代码以在每行输入中打印句子的所有排列?

java - 触摸时从 arrayList 中删除 Sprite - "Invalid index 4, size is 4"

ios - swift 数组在循环时不追加

javascript - 在JavaScript中的replace()方法中循环一个字符串

python - Pandas 数据框按列比较 2 组的字符串值

c - 如何在 C 中为子进程使用 SIGSTOP、SIGCONT 和 SIGKILL

c++ - qt 中 undefined reference

c - 是否有一种可移植的方法可以将本地系统时区转换为 libical timetype?

c++ - C++ 结构体中的指针