本節(jié)要掌握的內(nèi)容:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1、字符輸出函數(shù) putchar ()?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????2愧杯、 格式化輸出函數(shù) printf ()?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????? ?3棕兼、字符輸入函數(shù) getchar()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4涛酗、 格式化輸入 scanf ()?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5忌怎、字符串輸出函數(shù) puts()
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 6、字符串輸入函數(shù) ?gets()
我們把輸出函數(shù)酪夷、輸入函數(shù)分開來看榴啸。
本節(jié)講的函數(shù)使用時(shí)需要導(dǎo)入<stdio.h>庫文件。
輸出函數(shù)
? ??? ??1晚岭、putchar ()
? ? ? ? ? ? ? ? ? ? ?函數(shù)原型:int ?putchar ( int c)鸥印。
? ? ? ? ? ? ? ? ? ? ?功能:在標(biāo)準(zhǔn)輸出上顯示一個(gè)字符。
? ? ? ? ? ? ? ? ? ? ? 返回值:輸出的字符坦报。
? ? ? ? ? ? ? ? ? ? ?示例:int ?i = 65; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? char ?c='A';
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???putchar ?(a);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?putchar ?(b);
? ? ? ? ? ? ? ? ? ? ? 程序兩個(gè)?putchar ?()輸出都是“A”库说,65是“A”的ASCII碼。putchar ?( )是輸出字符片择。
? ??? ??2潜的、指定輸出?printf ()?
? ??????????????????printf ( ) 能輸出若干個(gè)數(shù)據(jù),且為任意類型字管。
? ???????????????????函數(shù)原型:int printf (const char ?*format,輸出的參數(shù))啰挪。
????????????????????函數(shù)參數(shù):format指定輸出格式,“ 嘲叔,”后面為不定參亡呵,是要輸出的內(nèi)容。
? ??????????????????函數(shù)返回值:成功返回輸出的字節(jié)數(shù)硫戈,失敗返回-1(EOF)锰什。
????????????????????函數(shù)功能:格式化字符串輸出。
? ? ? ? ? ? ? ? ? ? printf ( )支持的輸出格式如下:
? ? ? ? ? ? ? ? ? ? 示例一:int ?a =10 ; ?char ?b ='a' ; ?float ?c =3.14159 ; char ?d [ ] ="abcdef!" ;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? printf ( "%d", a); ?輸出 int型 a 的值。
? ???????????????????????????????????printf ( "%c", b); ?輸出 char 型 b 的值汁胆。
? ? ? ? ? ? ? ? ? ?示例二: 還可以多種數(shù)據(jù)類型一起輸出:???printf ( "%c梭姓,%d,%f嫩码,%s", b ,a ,c,d ); ? 輸出結(jié)果是:a誉尖, 10,3.141590谢谦,abcdef ?释牺。
? ? ? ? ? ? ? ? ? ? 示例三:用 轉(zhuǎn)義字符輸出,有有特定效果回挽,??printf ( "%s\t %.2f\n", d ,c );? 這里 “\t” 是縮進(jìn)没咙,“\n” 是換行,“%.2f” ?是保留兩位小數(shù)千劈。 效果如下:
? ? ? ? ? ?? ??? ? 示例四:還可以直接輸出漢字和其他字符祭刚, printf ( "你好!Hi墙牌!");??這里沒有要輸出參數(shù)涡驮。直接原樣輸出
? ? ? ? ? ? ? ? ? ? printf ( ) 格式有很多我就講著幾種了,其他的可以自己嘗試看效果喜滨,不明白轉(zhuǎn)義字符的朋友可以去看之前 寫的數(shù)據(jù)類型捉捅。
? ??? ??3、字符串輸出puts ( )
? ? ? ? ????????????函數(shù)原型:int puts(const char *s)虽风。
? ? ? ? ? ? ? ?????功能:在標(biāo)準(zhǔn)輸出上顯示字符串棒口。
????????????????????參數(shù):s為需要輸出的字符串。
? ??????????????????返回值:成功返回一個(gè)非0的數(shù)字辜膝;失敗返回-1或EOF无牵。
? ? ? ? ????????????示例:char c [ ]="abcdefgh!";
? ? ? ? ? ? ? ? ? ? ????????????puts ( c);
? ? ? ? ????????????這里輸出了字符串 c,輸出結(jié)果:abcdefgh厂抖!
輸入函數(shù)
? ? ? ? 1茎毁、讀取一個(gè)字符getchar ( )
? ??????????????函數(shù)原型:int getchar(void)。
? ? ? ? ? ? ? ? 函數(shù)功能:讀取鍵盤上的一個(gè)字符忱辅。
????????????????函數(shù)返回值:成功七蜘,返回讀到的字符,失敗或讀到結(jié)束符返回EOF(-1)耕蝉。
? ? ? ? ? ? ? ? 示例一:char c;?
? ? ? ? ? ? ? ? ? ? ? ? ? ? c=getchar ( ) ; ?讀取鍵盤輸入的一個(gè)字符崔梗。
? ? ? ? ? ? ? ? ? ? ? ? ? ? putchar( c) ; 輸出驗(yàn)證
? ? ? ? ? ? ? ? ? ?????????這里注意,getchar ( ) 返回值是 int類型垒在,返回的是ASCII碼。如果返回的字符太大超過了char范圍會(huì)報(bào)錯(cuò),char 范圍(-128 ~ 127场躯。ASCII碼范圍(0 ~ 255)谈为。
? ? ? ? ? ? ? ? ? 示例二:返回ASCII碼超出char范圍,用無符號踢关。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned char ? c;
? ??????????? ? ? ? ? ? ? ? ? ? ? ? c=getchar ( ) ; ?讀取鍵盤輸入的一個(gè)字符伞鲫。
? ? ? ? ? ? ? ? ? ? ? ? ? ????????? putchar( c) ; 輸出驗(yàn)證
? ? ? ? ? ? ? ? ? ? 數(shù)據(jù)范圍不明白的朋友,可以去看之前寫的數(shù)據(jù)類型签舞。
? ? ? ? 2秕脓、格式化輸入scanf ( )
? ??????????????函數(shù)原型:int scanf (const char *format, …)
????????????????函數(shù)參數(shù):format指定輸入格式,后面跟要輸入的變量的地址表儒搭,為不定參吠架,用”…”代表。
????????????????函數(shù)返回值:成功返回輸入的變量的個(gè)數(shù)搂鲫,失敗返回-1(EOF)傍药。
????????????????函數(shù)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定存儲(chǔ)單元中魂仍,并按回車鍵結(jié)束拐辽。
? ???????????????scanf ( )能讀到若干個(gè)數(shù)據(jù),且為任意類型擦酌。下圖是輸入格式:
? ? ? ? ? ? ? ? ? ? 示例:?int a, b; ?char c; char char s [ ];
??? ????????????????????????????scanf("%d", &a);--十進(jìn)制俱诸。
??? ????????????????????????????scanf("%x", &b);--十六進(jìn)制。
? ???????????????????????????????scanf("%c", &c); --輸入字符赊舶。
? ???????????????????????????????scanf("%s", &s);--輸入字符串睁搭。
? ? ? ? ? ? ? ? ? ? ????輸入是注意要寫”&“,這是個(gè)小問題锯岖,容易寫漏介袜。scanf 還可以連續(xù)輸入幾個(gè)字符,只要寫多個(gè)占位符就行出吹。
????????????????輸入數(shù)據(jù)時(shí)遇伞,遇到以下情況認(rèn)為該數(shù)據(jù)結(jié)束:
????????????????-? 空格、TAB或回車
????????????????-? 寬度結(jié)束
????????????????-? 非法輸入
? ? ? ? 3捶牢、字符串輸入gets ( )
????????????????函數(shù)原型:char *gets(char *s)
????????????????功能:從鍵盤輸入一以回車結(jié)束的字符串放入字符數(shù)組中鸠珠,并自動(dòng)加'\0'
????????????????參數(shù):s為字符數(shù)組,存儲(chǔ)輸入的字符串
????????????????返回值:成功返回字符數(shù)組的起始地址秋麸,失敗或輸入結(jié)束返回NULL渐排。
? ? ? ? ? ? ? ? 示例:char s[20];
? ? ? ? ? ? ? ? ? ? ? ? ? ? gets( s);--輸入字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? puts( s);--輸出驗(yàn)證
? ? ? ? ? ? ? ? 需要注意:輸入字符時(shí),這里只能輸入19個(gè)字符(留一個(gè)位置存字符串的結(jié)束符\0)灸蟆。假如輸入字符超過了19驯耻,則多余的符號也會(huì)被存到字符數(shù)組中,這樣就會(huì)造成內(nèi)存的訪問越界,結(jié)果是不可預(yù)料的可缚。