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 碼值為...