字串 scanf函式輸入字串詳解

2022-03-14 19:17:38 字數 1001 閱讀 9498

除了在定義字元陣列時初始化外,還可以通過scanf從鍵盤輸入字串。下面寫乙個程式:

用 scanf 給字元陣列賦值不同於對數值型陣列賦值。前面講過,給數值型陣列賦值時只能用 for 迴圈乙個乙個地賦值,不能整體賦值。而給字元陣列賦值時可以直接賦值,不需要使用迴圈。此外從鍵盤輸入後,系統會自動在最後新增結束標誌符 '\0'。但是用 scanf 輸入字串時有乙個地方需要注意:如果輸入的字串中帶空格,比如「i love you」,那麼就會有乙個問題。我們將上面程式執行時輸入的字串改一下:

1 # include 2

int main(void)3

我們看到,輸入的是「i love you」,而輸出的只有「i」。原因是系統將空格作為輸入字串之間的分隔符。也就是說,只要一「敲」空格,系統就認為當前的字串已經結束,接下來輸入的是下乙個字串,所以只會將空格之前的字串儲存到定義好的字元陣列中。

那麼這種情況該怎麼辦?那麼就以空格為分隔符,數數有多少個字串,有多少個字串就定義多少個字元陣列。比如「i love you」有兩個空格,表示有三個字串,那麼就定義三個字元陣列:

需要注意的是,前面講「清空緩衝區」的時候講過,用 scanf 輸入時,不管輸入什麼,最後「敲」的回車都會被留在緩衝區,這裡也不例外。輸入字串時最後「敲」的回車也會被留在緩衝區,如果緊接著要給乙個字元變數賦值的話,那麼還沒等你輸入系統就自動退出來了。因為系統自動將回車產生的字元 '\n' 賦給該字元變數了,所以此時對字元變數賦值前要首先清空緩衝區。

字串輸入函式

scanf gets fgets gets 的不足時它不檢查預留儲存區是否能容納實際輸入的資料,多出來的字元簡單地溢位到相鄰的記憶體區。fgets 對此進行了改進,它讓您輸入最大讀入的字元數,fgets是為i o檔案設計的,fgets 和gets 有三方面的不同 1.它需要第二個引數來說明最大讀入字...

無冗餘輸入字串 字串陣列 字串

問題 無冗餘 輸入乙個字串 分析 無冗餘 是指儲存的空間不能有冗餘的,比如,要存的陣列長度是10 加上 0 是11 不可以定義陣列為char str 20 這樣還會有8個位元組 還是9個位元組?的空間沒被用,就算是冗餘,因此不能事先分配乙個足夠大的空間,也就不好用陣列實現,然後應該用指標實現 參考的...

字串輸入

之前在學習input的時候,通過它能夠完成從鍵盤獲取資料,然後儲存到指定的變數中 注意 input獲取的資料,都以字串的方式進行儲存,即使輸入的是數字,那麼也是以字串方式儲存 demo username input 請輸入使用者名稱 print 使用者名為 s username password i...