C語言之字串和格式化輸入輸出

2021-10-07 21:26:25 字數 1855 閱讀 5923

c語言純小白

1.編寫乙個程式,提示使用者輸入名和姓,然後以「名,姓」的格式列印出來。

#include

intmain()

2.編寫乙個程式,提示使用者輸入名和姓,並執行下列操作:

1)列印名和姓,包括雙引號。

printf

("\n\"%s,%s\""

, last_name, first_name)

;

2)在寬度為20的字段左端/右端列印名和姓,包括雙引號。

printf

("\n\"%20s,%s\""

, last_name, first_name)

;//右對齊

printf

("\n\"%s,%-20s\""

, last_name, first_name)

;//左對齊

3)在比姓名寬3的字段中列印名和姓。

int width;

width =

strlen

(first_name)

+strlen

(last_name)+3

;printf

("\n\"%*s,%s\""

, width, last_name, first_name)

;

scanf()、getchar()、gets()函式的區別:

1)從讀取方式上。

scanf()是從輸入流緩衝中讀取資料。因為scanf()不接受空格,在提示後從鍵盤輸入「王 大壯」時,第一次scanf()獲得了「王」,第二次scanf()直接從緩衝中取出了空格以後的內容「大壯」,所以能順利輸出「大壯,王」。

同理,getchar()也是從輸入流緩衝中讀取值的。

而gets()是從終端裝置(鍵盤)獲取值的。

2)是否接受空格。

scanf()不接受空格,也就是說scanf()在輸入中遇到空格、回車以及tab就停止此次輸入了(比如,當輸入"wang dazhuang"時,只能獲取到「wang」,下一次scanf()才會獲取到「dazhuang」)。

getchar()、gets()接受空格,即遇到有空格的連空格在內表示一次輸入(比如,當輸入"wang dazhuang"時,獲取「wang dazhuang」)。不同的是,getchar()以回車結束,gets()以鍵盤的enter鍵結束。

3)是否會捨棄最後的回車符。

scanf()、getchar()不會捨棄最後的回車符,即回車符會被保留在緩衝區中;

gets()會捨棄最後的回車符。

*的含義:

1)在scanf()中使用,表示忽略要讀的項。比如 %*d 就是讀乙個 %d 該讀的東西,但不賦值給任何變數。

例如:scanf("%*d %*d %d", &n);

如果輸入2004 2005 2006

那麼n=2006

2)在printf中使用,表示用後面的形參替代的位置,實現動態格式輸出。在不知道字串寬度有多少又需要控制欄位寬的的時候,就用*,*沒達到控制寬度的就用空格補齊。

(*可以對應常量,也可以對應整型變數)

例如:printf("%*s",10,s);

意思是輸出字串s,但至少佔10個位置,不足的在字串s左邊補空格,這裡等同於printf("%10s",s);

3)%*.*

小數點.前也可以新增*,也要使用者輸入乙個位寬值來代替,表示輸出的字元所佔位寬。也就是說,前面定義輸出總寬度,後面定義輸出字元個數。

感謝以下博主部落格的指點:

《c primer plus 》第六版 習題 第四章

c語言中%*s的作用

C語言 字串和格式化輸入 輸出

今天,學習了c primer plus的第四章。本章講解了一些簡單的c預處理器的知識,一些字元 字串以及陣列等相關概念以及輸入輸出函式的使用。現將知識點總結如下 練習 假設乙個程式的開頭是這樣 define book war and peace int main void float cost 12...

字串和格式化輸入 輸出

字串就是乙個或多個字元的序列。雙引號不是字串的一部分,它們只是通知編譯器其中包含了乙個字串。c沒有為字串定義專門的變數型別,而是把它儲存在char陣列中。字串中的字元存放在相鄰的儲存單元中,每個字元占用乙個單元 而陣列由相鄰儲存單元組成,所以把字串儲存到陣列中是很自然的。c用空字元 0來標記字串的結...

字串和格式化輸入 輸出

字串簡介 字串 乙個或多個字元的序列 雙引號不是字串的一部分,只是通知編輯器其中包含了乙個字串。char 陣列型別和空字元 字串的字元存放在相鄰的儲存單元中,每個字元占用乙個單元 陣列中的最後乙個位置顯示字元 0,就是空字元,用來表示字串的結束 空字元不是數字0,是非列印字元,其 ascii 碼值為...