C語言scanf()返回值以及EOF
阿新 • • 發佈:2019-02-16
做acm練習題時偶然發現一個奇特的現象:while(scanf("%d %d", &a, &b) != EOF)與while(scanf("%d %d", &a, &b) == 2)是等價的。百度後發現:原來scanf()函式是有返回值的,並且返回值是等於正確輸入的個數:舉個例子: 1.我輸入的是 a = 1, b = 2, 那麼用一個int x來接收scanf()的返回值得到的結果是 x = 2 2. 如果我輸入的是 a = 1, b =q, 那麼 x = 1但是自己嘗試後貌似並不止這樣 :(先附上原始碼)#include <stdio.h>
int main() 1> 當我輸入 a = q時,程式直接輸出x = 0後退出,
{ 2>當輸入 a = 1, b = ctrl +z (EOF)時,需要再次輸
int a,b; 入一個ctrl + z程式才能正常結束,x = 1
int x; 3>當輸入 a = ctrl + z時,x = -1 程式直接結束
x = scanf("%d %d", &a, &b);
printf("%d", x);
return 0;
}通過幾輪嘗試發現:scanf()函式貌似是每輸入一個引數檢索一次,如果第一次檢索到EOF那麼程式將不再往下執行而是直接返回-1,同理當檢索到非正常輸入時也直接返回0不再往下檢索。
int main() 1> 當我輸入 a = q時,程式直接輸出x = 0後退出,
{ 2>當輸入 a = 1, b = ctrl +z (EOF)時,需要再次輸
int a,b; 入一個ctrl + z程式才能正常結束,x = 1
int x; 3>當輸入 a = ctrl + z時,x = -1 程式直接結束
x = scanf("%d %d", &a, &b);
printf("%d", x);
return 0;
}通過幾輪嘗試發現:scanf()函式貌似是每輸入一個引數檢索一次,如果第一次檢索到EOF那麼程式將不再往下執行而是直接返回-1,同理當檢索到非正常輸入時也直接返回0不再往下檢索。
最後附上一些參考的資料:http://blog.csdn.net/Linuxxulin/article/details/7018321 點選開啟連結