2013-07-21 115 views
0

如果我在scanf語句中提供字符串「Alice in wonder land」,下面的代碼的輸出(底部的代碼)是什麼?我的書上說的輸出應該是:做空格將字符串分隔成不同的字符串?

Alice 
in 
wonder 
land 

好吧,如果我已經提供了「愛麗絲驚奇地」作爲一個字符串,爲什麼是這樣的輸出?當我將「愛麗絲夢遊仙境」作爲一個單獨的字符串提供時,如何在「愛麗絲」,「在」,「奇蹟」,「土地」之間提供空格使它們分開的字符串?

#include<stdio.h> 
void main() 
{ 
    char s1[10], s2[10], s3[10], s4[10]; 
    scanf("%s%s%s%s", s1, s2, s3, s4); 
    printf("\n%s\n%s\n%s\n%s", s1, s2, s3, s4); 
    getch(); 
} 

謝謝! :)

+0

1)它不會編譯,如果你嘗試和2)你爲什麼不嘗試? – JRG

+0

你可能需要一個很好的C教程 – P0W

+0

@AdrianJandl在連續%s之間沒有空格 – lebowski

回答

1

這就是scanf的工作原理。 %s格式說明告訴scanf讀取直到任何空白,其中包括任何數量的空間凸片輸入密鑰並將其存儲在相應的地址。

從人,%s轉換規範,

匹配的非空白字符的序列;下一個指針必須是一個指向字符數組的指針,該指針的長度足以保存輸入序列和終止空字節('\ 0'),該字節會自動添加。輸入字符串在空格或最大字段寬度處停止,以先發生者爲準

0

scanf(3) man page

轉換開始之前,大部分轉換跳過空白

和:

s匹配的非塗白序列空格字符

-1

您的書籍權利。

當您從用戶處獲得一個帶有scanf的字符串時,當第一個spase,tab或enter在輸入中時,它停止讀取。其餘的輸入保留在緩衝區中。

這就是爲什麼你不應該使用scanf來讀取字符串。您可以使用gets()函數 ,該函數在第一次輸入時停止,這意味着您可以在輸入中包含空格或製表符。

我認爲你還沒學過FILES,所以現在應該足夠了。