總所周知,scanf是C提供的庫函數的內容,而絕大多數定義的函數都會有一個返回值。
那么scanf的返回值是什么呢?
查了CPP的解釋后,返回值就是返回的是scanf讀取的數據的個數。
這個概念可能比較抽象。先看如下示例:
我們來看第1個例子:
int main() {int a = 0;int b = 0;int n = scanf("%d %d", &a, &b);printf("%d\n", n); }
輸出結果為: 2
第2個例子:?
int main() {char a = 0;char b = 0;int n = scanf("%c", &a);printf("%d\n", n); }
輸出結果為 :1
如上可見,
當scanf中要讀取1個數據時(任何類型),scanf的返回值為1;
當scanf中要讀取2個數據時(任何類型),scanf的返回值為2;
當讀取類型和輸入類型沖突時,(即輸入的格式為%d,鍵盤卻輸入了一個字符a,),此時scanf不能讀取任何值,返回值為0;
那么這個有啥用呢?
不著急,我們先來看下面這個題目
輸入一個整數表示一個人的智商,如果大于等于140,則表明他是一個天才,輸出“Genius”。
輸入描述:
多組輸入,每行輸入包括一個整數表示的智商。
輸出描述:
針對每行輸入,輸出“Genius”。
咋一看好像沒什么問題,但你細品————“多組輸入” !
說明輸入一個數據按回車后,程序不能退出,要進行下一次循環;
問題來了,如何實現?????????????????????????寫無數個if函數一直判斷?(代碼長? 且? 中間不能退出)
這時候只需要一個表達式
while (scanf("%d", &a)==1)?
int main() {int a = 0;while (scanf("%d", &a)==1){if (a >= 140)printf("YES\n");elseprintf("NO\n");}return 0;}
若返回值為1 ,則會進入while循環,
若返回值不為1,則會跳出while循環,結束函數。
那么如何令返回值不為1呢?
- 輸入一個數字以外的字符,如:a,b,;,+;
- 同時按下Ctrl和z;
我們對Ctrl+z作出解釋:
????????先介紹一個:EOF(end of file)(文件結束標志)。
printf("%d", EOF);輸出為-1
只需在鍵盤輸入時輸入Ctrl+z便可以引用EOF,直接使得scanf返回值為-1
注意此時就不是給a賦值了
int main() {int a = 0;int b = 0;int n = scanf("%d %d", &a, &b);printf("%d\n", n);printf("%d", EOF); }
輸出值:-1
? ? ? ? ? ? ? -1
但當我們用VS實踐時卻發現如下問題:
為什么要連續輸入三個Crtl+z?
這里目前可以理解為VS獨有,平時就記成輸入一個Crtl+z就能停止就行了
謝謝大家,求個贊!!
?