魔公子世無(wú)雙
當我們提到輸入時(shí),這意味著(zhù)要向程序填充一些數據。輸入可以是以文件的形式或從命令行中進(jìn)行。C 語(yǔ)言提供了一系列內置的函數來(lái)讀取給定的輸入,并根據需要填充到程序中。
當我們提到輸出時(shí),這意味著(zhù)要在屏幕上、打印機上或任意文件中顯示一些數據。C 語(yǔ)言提供了一系列內置的函數來(lái)輸出數據到計算機屏幕上和保存數據到文本文件或二進(jìn)制文件中。
字符輸入輸出
字符輸入函數getchar
getchar函數的功能是接收用戶(hù)從鍵盤(pán)上輸入的一個(gè)字符。其一般調用形式為:getchar();
getchar會(huì )以返回值的形式返回接收到的字符.通常的用法如下:
char c; /*定義字符變量c*/
c=getchar(); /*將讀取的字符賦值給字符變量c*/
字符輸出函數putchar
putchar函數是字符輸出函數,其功能是在終端(顯示器)輸出單個(gè)字符。其一般調用形式為:putchar(字符變量);
putchar('A’); /*輸出大寫(xiě)字母A */
putchar(x); /*輸出字符變量x的值*/
putchar('\n’); /*換行*/
格式化輸入函數scanf
scanf函數稱(chēng)為格式輸入函數,即按照格式字符串的格式,從鍵盤(pán)上把數據輸入到指定的變量之中。Scanf函數的調用的一般形式為:
scanf(“格式控制字符串”,輸入項地址列表);
其中,格式控制字符串的作用與printf函數相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表項中的地址給出各變量的地址,地址是由地址運算符”&”后跟變量名組成的。
Scanf 函數中格式字符串的構成與printf函數基本相同,但使用時(shí)有幾點(diǎn)不同.
(1) 格式說(shuō)明符中,可以指定數據的寬度,但不能指定數據的精度。例:
floata;
scanf(“%10f”,&a); //正確
scanf(“%10.2f”,&a); //錯誤
(2) 輸入long類(lèi)型數據時(shí)必須使用%ld,輸入double數據必須使用%lf或%le。
(3) 附加格式說(shuō)明符”*”使對應的輸入數據不賦給相應的變量。
scanf()函數所用的轉換說(shuō)明符與printf()所用的幾乎完全相同。主要區別在于printf()把%f、%e、%E、%g、%G同時(shí)用于float類(lèi)型和double類(lèi)型,而scanf()只是把他們用于float類(lèi)型,而用于double類(lèi)型時(shí)要求使用l(字母l)修飾符。
轉換說(shuō)明符
%c 把輸入解釋成一個(gè)字符
%d 把輸入解釋成一個(gè)有符號十進(jìn)制整數
%e,%f,%g,%a 把輸入解釋成一個(gè)浮點(diǎn)數(%a是C99的標準)
%E,%F,%G,%A 把輸入解釋成一個(gè)浮點(diǎn)數(%A是C99的標準)
%i 把輸入解釋成一個(gè)有符號十進(jìn)制整數
%o 把輸入解釋成一個(gè)有符號的八進(jìn)制整數
%p 把輸入解釋成一個(gè)指針(一個(gè)地址)
%s 把輸入解釋成一個(gè)字符串:輸入的內容以第一個(gè)非空白字符作為開(kāi)始,并且包含直到下一個(gè)空白字符的全部字符
%u 把輸入解釋成一個(gè)無(wú)符號十進(jìn)制整數
%x,%X 把輸入解釋稱(chēng)一個(gè)有符號十六進(jìn)制整數
*修飾符在scanf中()的用法:
*在scanf()中提供截然不同的服務(wù),當把它放在%和說(shuō)明符字母之間時(shí),它使函數跳過(guò)相應的輸入項目。請參考程序事例:
/*用*跳過(guò)scanf接收的數字*/
#include<stdio.h>
intmain(void)
{
int num;
printf('Please enter three number:\n');
scanf('%*d %*d %d',&num);
printf('The last number is %d\n',num);
return 0;
}
gcc下運行結果如下:
Please enter three number:
2014 2015 2016
The last number is 2016
關(guān)于scanf()的返回值
scanf() 函數返回成功讀入的項目的個(gè)數。如果它沒(méi)有讀取任何項目(比如它期望接收一個(gè)數字而您卻輸入的一個(gè)非數字字符時(shí)就會(huì )發(fā)生這種情況),scanf()返回0。
當它檢測到“文件末尾”(end of file)時(shí),它返回EOF(EOF在是文件stdio.h中的定義好的一個(gè)特殊值,一般,#define指令將EOF的值定義為-1)。當您學(xué)過(guò)循環(huán)之后,或在參加ACM這樣的比賽及使用在線(xiàn)評測系統的時(shí)候會(huì )經(jīng)常用到這種寫(xiě)法。
格式化輸出函數printf
printf函數叫做格式輸出函數,其功能是按照用戶(hù)指定的格式,把指定的數據輸出到屏幕上.printf函數的格式為:
printf(“格式控制字符串”,輸出表項);
其中格式控制字符串用來(lái)說(shuō)明輸出表項中各輸出項的輸出格式(好比我要吃蘋(píng)果,告訴printf是做成罐頭吃還是直接吃)。輸出表項列出了要輸出的項,各輸出項之間用逗號分開(kāi)。輸出表項也可以沒(méi)有,則表示輸出的是格式字符串本身。
格式控制字符串有兩種:格式字符串和非格式字符串。非格式字符串在輸出的時(shí)候原樣打??;格式字符串是以%打頭的字符串,在”%”后面跟不同格式字符,用來(lái)說(shuō)明輸出數據的類(lèi)型、形式、長(cháng)度、小數位數等。格式字符串的形式為: % [輸出最小寬度] [.精度] [長(cháng)度] 類(lèi)型
例如,%d格式符表示 用十進(jìn)制整形格式輸出。%f表示用實(shí)型格式輸出,%5.2f 格式表示輸出寬度為5(包括小數點(diǎn)),并包含2位小數。常用的輸出格式及含義如下:
格式字符
d , i 以十進(jìn)制形式輸出有符號整數(正數不輸出符號)
O 以八進(jìn)制形式輸出無(wú)符號整數(不輸出前綴0)
x 以十六進(jìn)制形式輸出無(wú)符號整數(不輸出前綴0x)
U 以十進(jìn)制形式輸出無(wú)符號整數
f 以小數形式輸出單、雙精度類(lèi)型實(shí)數
e 以指數形式輸出單、雙精度實(shí)數
g 以%f或%e中較短輸出寬度的一種格式輸出單、雙精度實(shí)數
C 輸出單個(gè)字符
S 輸出字符串
關(guān)于printf的更多用法,可以自己在課后多找些習題看看。
例:
#include<stdio.h>
int main()
{
int a=12;
float b=3.1415;
char c='A';
printf('%d\n',a);
printf('o%o\n',a);
printf('0x%x\n',a);
printf('%3.2f\n',b);
printf('%c\n',c);
getchar();
return 0;
}
*修飾符在printf()中的用法:
假如您不想事先指定字段寬度,而是希望由程序來(lái)制定該值,那么您可以在字段寬度部分使用*代替數字來(lái)達到目的,但是您也必須使用一個(gè)參數來(lái)告訴函數寬度的值是多少。具體的說(shuō),如果轉換說(shuō)明符為%*d,那么參數列表中應該包括一個(gè)*的值和一個(gè)d的值,來(lái)控制寬度和變量的值。該技術(shù)也可以和浮點(diǎn)值一起使用來(lái)指定精度和字段寬度。
您可以參考下面的例子:
/*使用可變寬度輸出字段*/
#include<stdio.h>
int main(void)
{
unsigned width,precision;
int number = 256;
double weight = 25.5;
printf('Please input number's width:\n');
scanf('%d',&width);
printf('The number is: %*d\n',width,number);
printf('Then please input width and precision:\n');
scanf('%d %d',&width,&precision);
printf('Weight = %*.*f\n',width,precision,weight);
return 0;
}
gcc下運行過(guò)程及結果如下:
Please input number's width:
6
The number is: 256
Then please input width and precision:
8 3
Weight = 25.500
關(guān)于printf()的返回值
printf函數的返回值是返回所打印的字符的數目。如有輸出錯誤,那么printf()會(huì )返回一個(gè)負數(printf()的一些老版本會(huì )有不同的值)。
輸入與輸出是基礎的C語(yǔ)言的代碼里面所必須的,之后所涉及的一些簡(jiǎn)單的項目和代碼都是需要用到的,這一章的學(xué)習大家要用心,加油,讓我們一起進(jìn)步,我會(huì )幫助大家在我的經(jīng)驗上期總結一些學(xué)習的方法和注意的知識點(diǎn),有什么不理解的歡迎私信哦,我也準備了一些資料幫助大家,歡迎大家滴滴。
聯(lián)系客服