困扰为什么代码部分陷入循环

时间:2016-03-10 09:24:28

标签: 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;
}

编辑:字母是否保留在缓冲区中导致此行为?如果有任何清除缓冲区的提示?

2 个答案:

答案 0 :(得分:1)

输入错误后必须清除输入缓冲区,使用此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;
}

答案 1 :(得分:0)

它进入无限循环,因为你没有打破无效的输入 - 索引i从未增加。

为无效输入添加break

if (scanf("%d", &value) !=1)
{ 
    printf("Only numeric values can be entered \n");
    break;
}