繁体   English   中英

C:忽略scanf的返回值

[英]C: Ignoring return value of 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;
            }
        }
}

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

我似乎无法找出问题所在。 该代码应该以以下格式读取输入:

ñ

0 0 0 0

0 0 0

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

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

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

函数实际返回的位置。

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


PS:您在scanf()拥有的所有换行符都无济于事,并且破坏了可读性,将其丢弃。

例如,更改此:

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

对此:

scanf("%d", &m);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM