C:忽略scanf的返回值

时间:2017-10-21 13:32:28

标签: c function gcc scanf

int main()
{
int i, n, m;

while((scanf("%d",&n))!=EOF)
    {
        int a[n];

        for(i=0; i<n; i++){
            scanf("\n\n%d",&a[i]);}

        scanf("\n\n\n\n%d",&m);

        int b[m];

        for(i=0;i<m;i++){
            scanf("\n\n\n\n\n\n%d",&b[i]);}

        int count=0, place[n];

        for(i=0; i<n; i++){
            if(array_cmp(i,m,a,b)==1){
                count++;
                place[i]=i;
            }
        }
}

我一直收到错误, 警告:忽略'scanf'的返回值,使用属性warn_unused_result声明[-Wunused-result]

我似乎无法弄清楚什么是错的。该代码应该以以下格式读取输入:

名词

0 0 0 0

0 0 0

n和m是第一个和第二个数组的长度。

1 个答案:

答案 0 :(得分:1)

scanf()会返回一个值,并且在所有函数调用中执行任何操作,但此处除外:

scanf("%d",&n))!=EOF

你真正做的事情是函数返回。

您可以通过使用编译器指定的标志(即-Wno-unused-result)来避免此消息。

PS:scanf()中的所有换行符都不做任何操作,并且会损害可读性,会丢弃它们。

例如,改变这个:

scanf("\n\n\n\n%d",&m);

到此:

scanf("%d", &m);

注意:生成警告是因为忽略scanf()的返回值几乎总是一个坏主意。如果您真的不需要担心它是否成功,最好使用(void)scanf(…)明确地投射结果。