当输入一个字母时,这段代码不断打印“输入数组值:只能输入数值”。我不明白为什么它不只是打印一次并继续接受输入。理想情况下,用户将重新输入一个或整个值集,因此使用仅退出循环的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;
}
编辑:字母是否保留在缓冲区中导致此行为?如果有任何清除缓冲区的提示?
答案 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;
}