關於C scanf的乙個小知識

2022-09-20 15:30:12 字數 1416 閱讀 7141

關於c++的scanf,其實在使用時有乙個注意的點。

我們來看乙個簡單的例子。

對於輸入的一行,如果這一行的開頭需要輸入乙個字元,例如這樣的輸入:

a 10 20

b 30

a 3 50

...

我們可以使用這種方式來讀入,使用一段**來進行試驗:

#includeusing namespace std;

int main()

else if(c=='b')

}}

應該能看懂,輸入a 20 30就是輸出20+30的和,輸入b 5就是直接輸出5,最前面輸入的n是次數。

好,執行試驗一下:

有人會問,輸入的n是5,但是為什麼兩次就停止了?我們來做個試驗:

int main()

else if(c=='b')

}}

我們同樣執行一次,結果是:

紅框圈出的位置就是輸出。我們可以看到,裡面除了正常的'a','b'的ascii碼65,66以外,還有10的出現。

10代表換行符,那麼,我們可以知道:

scanf的輸入讀取,其實是按照連續的字元流為單位進行解讀的。讀入完乙個數後,後面的空格或者換行符還是殘留在流中。解決方法:

方法一

使用字串的形式讀入,這種情況下,%s不會把殘留的\n讀入進來。

**:

#includeusing namespace std;

int main()

else if(s[0]=='b')

}}

方法二既然多了乙個換行符,那麼把這個換行符使用某些方法讀掉就可以了,可以使用getchar來,也可以通過scanf的格式說明符來。

**:

#includeusing namespace std;

int main()

else if(c=='b')

}}

方法三先使用字串的形式讀入,再使用sscanf解析字串。這樣由於每次讀入的字串會被替換,因此殘留的換行符不會造成影響。

#includeusing namespace std;

char s[1000];

int main()

else if(c=='b')

}}

乙個關於博士的小故事

下面是我看到的乙個小故事,也許已經很舊了,但是很有教育意義,覺得不錯就發上來了。有乙個博士分到一家研究所,成為學歷最高的乙個人。有一天他到單位後面的小池塘去釣魚,正好正副所長在他的一左一右,也在釣魚。他只是微微點了點頭,這兩個本科生,有啥好聊的呢?不一會兒,正所長放下釣竿,伸伸懶腰,蹭蹭蹭從水面上如...

關於vim,ctags的乙個小技巧

關於vim,ctags的乙個小技巧 vim可以使用ctags製作的tags檔案來瀏覽程式原始檔。問題是,當原始檔存放在目錄樹 也就是所謂的source tree 的時候,該怎麼辦呢?在預設情況下,ctags只會處理當前目錄裡的原始檔,而且vim也只會參考當前目錄的tags檔案。這時候,如果當前目錄裡...

關於Applet的乙個小收穫

最近為了打發空餘的時間,開始用 寫小遊戲。今天碰到了乙個讓我很迷惑的問題 寫好的程式在 eclipse 這樣的ide 工具裡執行一切正常。但當在頁面上執行時,會在要出現時不動,顯示 不出來。我讀去的方法如下 後來,在網上搜尋資料才發現 在網頁上有些許限制,而其中最大的限制就是 不能訪問本地硬碟。於是...