簡體   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