printf和scanf函數(shù)為重要的文字交互函數(shù),printf用于輸出字符串,scanf用于掃描用戶輸入,是終端界面最常用的兩個(gè)函數(shù)。
這兩個(gè)函數(shù)都包含在stdio.h標(biāo)準(zhǔn)輸入輸出頭文件中,在使用中需要包含。
在學(xué)習(xí)這兩個(gè)函數(shù)前,我們先要了解一下字符串。
1、字符串的認(rèn)識(shí)
在c語(yǔ)言中沒有字符串的概念,我們所接觸到的基本數(shù)據(jù)類型中只有int、char、Bool、float、double等類型,而字符串是由一系列的字符所組成,為了表示字符串,需要用到字符數(shù)組,在一個(gè)字符數(shù)組中,前面的元素為char類型(各占8個(gè)bit),最后一位存儲(chǔ)一個(gè)結(jié)束標(biāo)志\0,這樣以來,程序就可以通過這個(gè)字符數(shù)組的首地址(數(shù)組名標(biāo)識(shí)符)和結(jié)束標(biāo)志(\0)從內(nèi)存中讀取該字符串。
2、占位符的認(rèn)識(shí)
占位符是一種特殊的運(yùn)算,用于將一些其他數(shù)據(jù)類型的數(shù)據(jù)轉(zhuǎn)換為特殊的字符格式,嵌入到某個(gè)字符串中。有如下幾種:
| 占位符 | 作用 |
|---|---|
| %a,%A | 讀入一個(gè)浮點(diǎn)值(僅C99有效) |
| %c | 讀入一個(gè)字符 |
| %d | 讀入十進(jìn)制整數(shù) |
| %i | 讀入十進(jìn)制,八進(jìn)制,十六進(jìn)制整數(shù) |
| %o | 讀入八進(jìn)制整數(shù) |
| %x,%X | 讀入十六進(jìn)制整數(shù) |
| %s | 讀入一個(gè)字符串,遇空格、制表符或換行符結(jié)束。 |
| %f,%F,%e,%E,%g,%G | 用來輸入實(shí)數(shù),可以用小數(shù)形式或指數(shù)形式輸入。 |
| %p | 讀入一個(gè)指針 |
| %u | 讀入一個(gè)無(wú)符號(hào)十進(jìn)制整數(shù) |
| %n | 至此已讀入值的等價(jià)字符數(shù) |
| %[] | 掃描字符集合 |
| %% | 讀%符號(hào) |
3、printf函數(shù)
該函數(shù)接受一個(gè)字符串作為參數(shù),其作用是將傳入的字符串打印在終端窗口上。
字符串可以包含占位符。
舉例如下:
#include <stdio.h>
//程序入口(主函數(shù))
int main()
{
int count=100;
char grade='B';
float height=1.78f;
double pi=3.141592654;
//輸出整數(shù),%d也可
printf("數(shù)量為 %i \n",count);
//輸出字符
printf("等級(jí)為 %c \n",grade);
//輸出兩位小數(shù),默認(rèn)6位
printf("身高為 %.2f 米\n",height);
//輸出多位小數(shù),.10表示總共10位數(shù)
printf("圓周率 %.10g \n",pi);
return 0;
}
在該例子中,定義了int、char、float、double等數(shù)據(jù)類型,他們可以通過占位符嵌入到字符串中,字符串中的\n為制表位,用于換行輸出。
輸出結(jié)果如下:
數(shù)量為 100
等級(jí)為 B
身高為 1.78 米
圓周率 3.141592654
4、scanf函數(shù)
scanf函數(shù)用于獲取用戶輸入數(shù)據(jù),并存儲(chǔ)到內(nèi)存變量中。該函數(shù)需要接受兩種參數(shù),一種是占位字串,用于表示輸入數(shù)據(jù)格式,一種是內(nèi)存單元的地址,用于存儲(chǔ)輸入的數(shù)據(jù)。
為此我們需要定義相應(yīng)的變量用于儲(chǔ)存用戶輸入
int a;
int b;
然后調(diào)用函數(shù)scanf,并設(shè)置合適的輸入格式:
scanf("%d;%d",&a,&b);
該代碼中兩個(gè)占位符之間用“;”隔開,表示接收的數(shù)據(jù)之間要用“;”隔開,缺省的話,可以用空格表示,后面的參數(shù)前面加&表示變量地址。
通過以上步驟即可將用戶輸入的數(shù)據(jù)保存到內(nèi)存單元中。
5、其他
1、scanf要求用戶輸入數(shù)據(jù),不會(huì)有任何提示,為了交互性的考慮,需要用printf函數(shù)進(jìn)行必要的提示;
2、用戶輸入的數(shù)據(jù)不一定復(fù)合格式,要設(shè)置必要的檢查環(huán)節(jié),確保用戶輸入正確的數(shù)據(jù);
3、printf多用于程序的調(diào)試,要合理運(yùn)用。