回答
從man
頁:
NAME
scanf, fscanf, sscanf, vscanf, vsscanf, vfscanf
...
RETURN VALUE
These functions return the number of input items successfully matched
and assigned, which can be fewer than provided for, or even zero in the
event of an early matching failure.
The value EOF is returned if the end of input is reached before either
the first successful conversion or a matching failure occurs. EOF is
also returned if a read error occurs, in which case the error indicator
for the stream (see ferror(3)) is set, and errno is set indicate the
error.
在你的情況,scanf()
可以返回0
,1
或EOF
。
P.S.正如其他人所指出的那樣,你缺失在g
前面的符號:
int p=scanf("%d",&g);
沒有符號,你的代碼的行爲是不確定的。
[''scanf()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/) scanf.html)返回已成功掃描的項目數a nd分配。如果格式字符串是'「%s%d%f%* s%n%d」',那麼如果一切正常,它將返回4。'%* s'禁止賦值,因此不計數,'%n'返回一個偏移量,不計數。如果您獲得0,1,2或3,則出現問題。如果沒有數據需要讀取,或者存在輸入錯誤(不是格式錯誤,而是「硬件」錯誤),則只返回EOF。使用''%d''格式,只有一次轉換,所以你會得到'EOF','0'或'1'。 –
從scanf:
成功時,該函數返回成功讀取的項目數。如果發生匹配故障,此計數可以匹配預期的讀數數量或更少,甚至爲零。 如果在成功讀取任何數據之前輸入失敗,則返回EOF。
我想是因爲你忘了在scanf函數的「&」你的代碼不會正常工作..
int g=0; //init the variable
int p=scanf("%d",&g);
的scanf函數會將輸入的值與G變量地址。
你爲什麼認爲變量需要初始化? –
從技術上講,這是UB(未定義的行爲)。
int g;
int p=scanf("%d",g);
^
你傳遞一個未初始化整數SCANF使用它作爲寫入地址。從這時起,任何事情都可能發生。您的應用很可能會崩潰。
不管你會給在VDU輸入變爲可變g
,如果成功讀取,p
等於1
它將返回1作爲scanf函數返回的項數成功讀取
- 1. 這個C函數返回什麼?
- 2. C++函數應該返回什麼?
- 3. 爲什麼scanf總是返回1?
- 4. 爲什麼這個scanf返回false?
- 5. 函數返回什麼
- 6. jQuery函數返回什麼?
- 7. unescape()函數返回什麼?
- 8. scanf函數的C/C++
- 9. C:爲什麼不能在scanf()函數中使用字符串?
- 10. 用C返回空隙,而不必scanf函數INT
- 11. .pipe()函數在gulp中返回什麼?
- 12. 高階函數返回函數什麼都不返回
- 13. C中的函數是什麼返回當前目錄?
- 14. 爲什麼JS函數在C++中返回不同的結果?
- 15. 什麼是C++中以下函數的返回類型
- 16. 爲什麼angular在回調函數中返回一個函數?
- 17. Scanf(「%c%f%d%c」)返回奇怪值
- 18. 什麼是C scanf()函數等效的cmd腳本?
- 19. MySQL的函數返回什麼
- 20. 我的函數返回空。爲什麼?
- 21. 爲什麼我的函數返回NULL?
- 22. 爲什麼我的函數返回None?
- 23. 爲什麼我的函數返回undefined?
- 24. 函數的返回值是什麼?
- 25. 什麼系統函數和cp命令在C/Linux中返回
- 26. 在C++中typeid(var_name).name()函數返回什麼?
- 27. 爲什麼mysql函數在C++中返回值-1?
- 28. 瞭解ML中函數返回函數的好處是什麼?
- 29. 在遞歸函數中返回函數和不返回有什麼區別?
- 30. 故障與scanf函數(C)
不僅僅是谷歌'回報scanf'的價值。你會得到這麼多的鏈接,包括一些SO帖子的答案。 –
函數可能不會返回。也許你的意思是'int p = scanf('%d',&g);'? – wildplasser
你的代碼錯了,應該是'int p = scanf('%d',&g);'所以它是未定義的行爲 – Flexo