第1章之編程練習心得20140705

或許是真的是一直在玩單片機,所以偏向於單片機C語言,今天簡單的gets()都遇到了問題。目的是要從鍵盤讀取幾行,然後輸出最字符數最大的那行,這樣gets()可以勝任,gets在遇到enter即換行符是會停止讀入,但是換行符不最爲讀取串的內容,讀取的換行符被轉換爲NULL,即‘\0’,由此來結束字符串。而getchar與之不同,會讀取換行符(換行符會放在緩衝區)

while(gets(input)!= NULL)

問題出在,假如我讀取了三行之後,不想讀入了呢?該怎麼結束,第三行以enter結束,再接着按一個enter?顯然是不行的,調試發現gets將這個enter轉換爲‘\0’,然後存入數組。然後繼續進入while的條件判斷,執行gets,等待用戶輸入,這不是我想要的結果。

於是自作聰明的在while循環加了個判斷,

//if(!strcmp(input,"-1"))
//break;

人爲地給標誌位。

後來百度,發現在不輸入任何字符之前,按ctrl+z 就可以讓gets返回null。還真是這樣。其實ctrl+z只是告訴gets 沒有鍵入字符,同時給個0給gets函數,這樣gets函數就返回NULL了。

附上

gets的讀取規則:

1.只要gets遇到換行符,即便它是輸入的第一個字符,gets也會停止讀取並返回。如果輸入的第一個字符就爲換行符,那麼字符串將是空串。

2.gets函數讀取換行符並丟棄之,換行符將不會存儲在字符串中。

gets的返回值:

1.正常讀取,沒有遇到文件結尾時,則返回字符串,返回字符串的首地址,char *類型。讀取空串也是正常讀取。與getschar的返回不同。gets是肯定不會返回int類型的 EOF的。

2.遇到文件結尾,返回NULL。

在gets函數沒有遇到任何數據之前遇到文件結尾標誌將返回NULL。比如在運行程序後,什麼也不輸入,只按ctrl+z,gets函數返回了null。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章