2010-12-05 49 views

回答

4

使用fgets()而不是scanf()

+2

這並不回答這個問題,即「爲什麼」。 – caf 2010-12-06 00:40:25

+0

謝謝!它工作 – user531119 2010-12-06 01:56:35

0

bookname切切實實爲某種字符的;-) 的一點是,在第一個空格字符這種形式停止scanf

您可以使用不同的格式字符串,但在這種情況下,可能應該更喜歡使用fgets

scanf真的應該用於「格式化」輸入。

18

%s轉換說明符導致scanf停止在第一個空格字符處。如果您需要能夠讀取空白字符,你要麼需要使用%[轉換說明,如

scanf("%[^\n]", bookname); 

將讀到的一切到下一個換行符,並將其存儲到bookname,雖然是安全的你應該在轉換說明符中指定書名的最大長度;例如如果BOOKNAME預留有30個字符計數空終止符,你應該寫

scanf("%29[^\n]", bookname); 

否則,你可以使用fgets()

fgets(bookname, sizeof bookname, stdin); 

我喜歡fgets()解決方案,個人。