我是初学程序员。我有一个不允许输入浮点数或字符的函数。它与gcc 3.4.2一起工作正常,但现在我更新到4.7.1并且它无法正常工作。它现在仅适用于第一个输入a [0]。如果我输入让我们说'x',它将显示“错误的输入”,但是如果我输入例如'1'表示[0],然后输入'x'表示[1],它仍会说输入OK和将“1”分配给[1];我怎样才能解决这个问题?谢谢!
void initArray(unsigned int a[]) {
double q;
int x, c;
for ( x = 0; x < SIZE; x++){
printf("a[%d] ", x);
printf("Enter number: ");
scanf("%lf", &q);
if (q == (unsigned int) q) {
printf("Input OK.\n");
a[x] = q;
fflush(stdin);
}
else {
printf("Wrong Input\n");
fflush(stdin);
x--;
}
}
printf("\n");
}
答案 0 :(得分:3)
您应该检查scanf
的返回值。它返回它设置为“扫描”的项目数,如果它无法扫描任何内容,它将为零,例如当您输入'x'
时:
if (scanf("%lf", &q) == 1)
{
printf("Input OK.\n");
a[x] = q;
}
else
{
printf("Wrong Input\n");
x--;
}
答案 1 :(得分:0)
我建议你替换
scanf("%lf", &q);
与
while ((c=(scanf(" %lf%c", &q, &tmp) !=2 || !isspace(tmp)))
|| (q != (unsigned int) q)) {
printf("Your input is invalid please enter again: ");
if(c) scanf("%*[^\n]");
}
scanf("%*[^\n]");
清除您的标准输入,因此您的代码中不再需要fflush(stdin)
所以你的代码可能是:
void initArray(unsigned int a[]) {
double q;
int x, c=0;
char tmp;
for ( x = 0; x < SIZE; x++){
printf("a[%d] ", x);
printf("Enter number: ");
while ( (c=(scanf(" %lf%c", &q, &tmp) !=2 || !isspace(tmp)))
|| (q != (unsigned int) q)) {
printf("Your input is invalid please enter again: ");
if(c) scanf("%*[^\n]");
}
a[x] = q;
}
printf("\n");
}