今天在 replit.com 上測試 C 語言發現一個問題, 當程式中用 scanf() 讀取鍵盤輸入時, 編譯過程會出現 "ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’" 警告訊息, 例如 :
#include <stdio.h>
int main() {
int age;
printf("請輸入年齡 =>");
scanf("%d", &age);
printf("您的年齡:%d\n", age);
return 0;
}
執行結果如下 :
test.c: In function ‘main’:
test.c:6:9: warning: ignoring return value of ‘scanf’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
6 | scanf("%d", &age);
| ^~~~~~~~~~~~~~~~~
請輸入年齡 =>20
您的年齡:20
原因是 scanf() 是有回傳值的, 它會傳回成功讀取與賦值之攔位數, 例如成功讀取一個變數就傳回 1, 否則傳回 0, 參考 :
若要避開此 warning 可宣告一個 int 變數來接收其傳回值, 例如 :
#include <stdio.h>
int main() {
int age;
printf("請輸入年齡");
int x=scanf("%d", &age);
printf("%d\n", x);
printf("您的年齡:%d", age);
return 0;
}
當輸入整數則讀取會成功且傳回 1; 若輸入字串例如 abc 會讀取失敗傳回 0.
另一個作法是把 scanf() 放在一個空的 if 裡也可以, 例如 :
#include <stdio.h>
int main() {
int age;
printf("請輸入年齡");
if (scanf("%d", &age)) {} # 空的 if
printf("您的年齡:%d", age);
return 0;
}
但空的 if 感覺有點怪.
沒有留言:
張貼留言