在C中使用scanf的多个条件

0g0grzrc  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(119)

TLDR:我需要检查我用scanf扫描到数组中的输入是否真的是一个整数,同时使用EOF。
我需要将数字扫描到一个数组中,直到EOF为止。我使用静态分配的内存来完成所有操作,因为我是一个初学者,目前动态分配的内存对我来说很难理解。我还使用getc来获取最后的“\n”输入(但这不是问题-只是说出来让你知道)。我的第一个想法是:

while(scanf("%d", &number[i][j]) != EOF )
**some code**

但是这个解决方案不检查输入是否是整数,例如我的输入是。
代码不会停止,因为最后一个数组的值是0,直到我扫描到一个数字。

while(1)
    if(scanf("%d", &number[i][j]) != 1)
        printf("Incorrect input.\n");
return 0;

但是由于EOF等于-1,这意味着即使在文件的末尾我也得到了输入,这是我不想要的。那么,有没有什么方法可以有更多的条件来比较scanf呢?例如(我知道这不起作用,但为了帮助你理解我的意思):

while(1)
    if(scanf("%d", &number[i,j] != 1 && scanf("%d", &number[i,j]) != EOF)
        printf("Incorrect input.\n");
return 0;

但是这个“解决方案”需要两次输入。我在这个网站上也找到了一些答案,建议使用其他方式来获取输入,而不是scanf,但是我需要具体使用scanf函数。

jhdbpxl9

jhdbpxl91#

您可以将scanf的返回值保存到int类型的变量中,然后在以后对其执行进一步的测试:

int val, ret;

while ( ( ret = scanf( "%d", &val ) ) != EOF )
{
    if ( ret != 1 )
    {
        printf( "Incorrect input.\n" );
        exit( EXIT_FAILURE );
    }

    //input is ok, so do something with the input value
    DoSomethingWithValue( val );
}

//if this line of code is reached, then EOF has been encountered

相关问题