可能重複:
How do you allow spaces to be entered using scanf?çscanf函數與空間問題
的printf( 「請在書名\ N鍵」); 012fscanf(「%s」,bookname);
我喜歡這裏面的數據: - C程序設計
但爲什麼輸出這樣的數據: - ç
失去編程(串)?
爲什麼
謝謝。
可能重複:
How do you allow spaces to be entered using scanf?çscanf函數與空間問題
的printf( 「請在書名\ N鍵」); 012fscanf(「%s」,bookname);
我喜歡這裏面的數據: - C程序設計
但爲什麼輸出這樣的數據: - ç
失去編程(串)?
爲什麼
謝謝。
使用fgets()
而不是scanf()
這並不回答這個問題,即「爲什麼」。 – caf 2010-12-06 00:40:25
謝謝!它工作 – user531119 2010-12-06 01:56:35
好bookname
切切實實爲某種字符的;-) 的一點是,在第一個空格字符這種形式停止scanf
。
您可以使用不同的格式字符串,但在這種情況下,可能應該更喜歡使用fgets
。
scanf
真的應該用於「格式化」輸入。
%s
轉換說明符導致scanf
停止在第一個空格字符處。如果您需要能夠讀取空白字符,你要麼需要使用%[
轉換說明,如
scanf("%[^\n]", bookname);
將讀到的一切到下一個換行符,並將其存儲到bookname
,雖然是安全的你應該在轉換說明符中指定書名的最大長度;例如如果BOOKNAME預留有30個字符計數空終止符,你應該寫
scanf("%29[^\n]", bookname);
否則,你可以使用fgets()
:
fgets(bookname, sizeof bookname, stdin);
我喜歡fgets()
解決方案,個人。
什麼是`bookname`? – khachik 2010-12-05 10:42:56