C:忽略扫描的返回值


int main()
{
int i, n, m;
while((scanf("%d",&n))!=EOF)
    {
        int a[n];
        for(i=0; i<n; i++){
            scanf("nn%d",&a[i]);}
        scanf("nnnn%d",&m);
        int b[m];
        for(i=0;i<m;i++){
            scanf("nnnnnn%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;
            }
        }
}

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

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

n

0 0

0 0

0 0

0

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

scanf()返回一个值,并且在所有函数调用中都不做任何事情,除了这里:

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

你实际用函数返回的东西做某事的地方。

你可以避免这个消息,通过使用编译器指定的标志(即 -Wno-unused-result )。


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

例如,更改以下内容:

scanf("nnnn%d",&m);

对此:

scanf("%d", &m);

注意:之所以生成警告,是因为忽略 scanf() 的返回值几乎总是一个坏主意。最好在那些您真的不需要担心它是否成功的极少数情况下显式地使用 (void)scanf(…) 转换结果。

最新更新