0

我是一个初学者程序员。我有一个不允许输入浮点数或字符的函数。它在 gcc 3.4.2 上运行良好,但现在我更新到 4.7.1 并且无法正常运行。它现在仅适用于第一个输入 a[0]。如果我输入让我们说'x',它会显示“错误输入”,但是如果我输入例如'1' for a[0],然后输入'x' for a[1],它仍然会说 Input OK and将“1”分配给 a[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");
} 
4

2 回答 2

3

您应该检查scanf. 它返回它设法“扫描”的项目数,如果它未能扫描任何内容,则它将为零,例如当您输入时'x'

if (scanf("%lf", &q) == 1)
{
    printf("Input OK.\n");
    a[x] = q;
}
else
{
    printf("Wrong Input\n");
    x--;
}
于 2013-04-02T11:15:54.097 回答
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");
}
于 2013-04-02T11:22:27.070 回答