天天看點

ignoring return value of ‘scanf’, declared with attribute warn_unused_result

#include <stdio.h>

int main(int argc, const char * argv[]) {

    int k;
    scanf("%d",&k);
    int arr[k];
    for(int i = 0;i<k;i++){
        scanf("%d",&arr[i]);
    }
    int sum=0,maxSum = 0;
    
    for(int j = 0;j<k;j++){
        sum += arr[j];
        if(sum > maxSum){
            maxSum = sum;
        }else if(sum < 0){
            sum = 0;
        }
    }
    
    printf("%d\n",maxSum);
    
    return 0;
}
           

pta上寫代碼送出後會出現ignoring return value of ‘scanf’, declared with attribute warn_unused_result的警告,

并不是錯誤,但是看起來不爽,

原因是scanf的傳回值沒有被使用造成的,因為傳回值為1時代表輸入成功,傳回值為0說明輸入錯誤,類型不比對,比如需要int類型但卻輸入了個字元串,是以可以根據傳回值結果添加錯誤提示,這樣就使用了scanf的傳回值,就不會報警告了

修改後的代碼如下:

#include <stdio.h>

int main() {

    int k;
    if(scanf("%d",&k) != 1){
        printf("請輸入整數!");
    }
    int arr[k];
    for(int i = 0;i<k;i++){
        if(scanf("%d",&arr[i]) != 1){
            printf("請輸入整數!");
        }
    }
    int sum=0,maxSum = 0;
    
    for(int j = 0;j<k;j++){
        sum += arr[j];
        if(sum > maxSum){
            maxSum = sum;
        }else if(sum < 0){
            sum = 0;
        }
    }
    
    printf("%d\n",maxSum);
    
    return 0;
}