这段代码在输入字母时不断打印“输入数组值:只能输入数字值”。我不明白为什么它不只打印一次并继续接受输入。理想情况下,用户将重新输入一个或整组值,因此使用仅退出循环的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/