輸入

2017-01-01 39 views
-2

,如果我做了以下輸入

scanf("%d,%d", &i, &j); 

,並提供這將導致不成功匹配的輸入到底會發生什麼時?它會把垃圾存入j嗎?

+3

您的輸入是什麼? –

+0

看起來像重複:http://stackoverflow.com/questions/15091284/read-comma-separated-input-with-scanf –

+3

[爲什麼不閱讀手冊頁](https://linux.die.net/ man/3/scanf) –

回答

5

輸入具有恰好匹配供給格式scanf()是成功。

引用C11,章§7.21.6.2,fsacnf(),(重點煤礦

除了在一個%說明符時,輸入項(或者,在一個%n指令的情況下的情況下,輸入字符數 )被轉換爲適合轉換說明符的類型。 如果 輸入項目不是匹配序列,則指令的執行將失敗:此 條件是匹配失敗。除非分配抑制被*,指示,否則 轉換結果將放置在 格式參數指向的第一個參數所指向的對象中,該參數尚未收到轉換結果。如果此對象 沒有適當的類型,或者對象中的轉換結果不能表示爲 ,則行爲未定義。

和,

當所有指令 已經執行,或者如果一個指令失敗(如下面詳述),函數返回。

所以,合併上述情況下,

  • 對於像100, 200的輸入時,掃描將是成功。 ij都將分別保持給定值100200

  • 對於像100 - 200的輸入,掃描將失敗(匹配失敗)和j內容將保持不變,即,jscanf()操作中分配任何值。

建議的意見:總是檢查返回值爲scanf()函數族來確保函數調用成功。