當我們提到輸入時,這意味着要向程序填充一些數據。輸入可以是以文件的形式或從命令行中進行。C 語言提供了一系列内置的函數來讀取給定的輸入,并根據需要填充到程序中。
當我們提到輸出時,這意味着要在屏幕上、打印機上或任意文件中顯示一些數據。C 語言提供了一系列内置的函數來輸出數據到計算機屏幕上和保存數據到文本文件或二進制文件中。
字符輸入輸出
字符輸入函數getchar
getchar函數的功能是接收用戶從鍵盤上輸入的一個字符。其一般調用形式為:getchar();
getchar會以返回值的形式返回接收到的字符.通常的用法如下:
char c; /*定義字符變量c*/
c=getchar(); /*将讀取的字符賦值給字符變量c*/
字符輸出函數putchar
putchar函數是字符輸出函數,其功能是在終端(顯示器)輸出單個字符。其一般調用形式為:putchar(字符變量);
putchar(‘A’); /*輸出大寫字母A */
putchar(x); /*輸出字符變量x的值*/
putchar(‘\n’); /*換行*/
格式化輸入函數scanf
scanf函數稱為格式輸入函數,即按照格式字符串的格式,從鍵盤上把數據輸入到指定的變量之中。Scanf函數的調用的一般形式為:
scanf(“格式控制字符串”,輸入項地址列表);
其中,格式控制字符串的作用與printf函數相同,但不能顯示非格式字符串,也就是不能顯示提示字符串。地址表項中的地址給出各變量的地址,地址是由地址運算符”&”後跟變量名組成的。
Scanf 函數中格式字符串的構成與printf函數基本相同,但使用時有幾點不同.
(1) 格式說明符中,可以指定數據的寬度,但不能指定數據的精度。例:
floata;
scanf(“f”,&a); //正确
scanf(“.2f”,&a); //錯誤
(2) 輸入long類型數據時必須使用%ld,輸入double數據必須使用%lf或%le。
(3) 附加格式說明符”*”使對應的輸入數據不賦給相應的變量。
scanf()函數所用的轉換說明符與printf()所用的幾乎完全相同。主要區别在于printf()把%f、%e、%E、%g、%G同時用于float類型和double類型,而scanf()隻是把他們用于float類型,而用于double類型時要求使用l(字母l)修飾符。
轉換說明符
%c 把輸入解釋成一個字符
%d 把輸入解釋成一個有符号十進制整數
%e,%f,%g,%a 把輸入解釋成一個浮點數(%a是C99的标準)
%E,%F,%G,%A 把輸入解釋成一個浮點數(%A是C99的标準)
%i 把輸入解釋成一個有符号十進制整數
%o 把輸入解釋成一個有符号的八進制整數
%p 把輸入解釋成一個指針(一個地址)
%s 把輸入解釋成一個字符串:輸入的内容以第一個非空白字符作為開始,并且包含直到下一個空白字符的全部字符
%u 把輸入解釋成一個無符号十進制整數
%x,%X 把輸入解釋稱一個有符号十六進制整數
*修飾符在scanf中()的用法:
*在scanf()中提供截然不同的服務,當把它放在%和說明符字母之間時,它使函數跳過相應的輸入項目。請參考程序事例:
/*用*跳過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
關于scanf()的返回值
scanf() 函數返回成功讀入的項目的個數。如果它沒有讀取任何項目(比如它期望接收一個數字而您卻輸入的一個非數字字符時就會發生這種情況),scanf()返回0。
當它檢測到“文件末尾”(end of file)時,它返回EOF(EOF在是文件stdio.h中的定義好的一個特殊值,一般,#define指令将EOF的值定義為-1)。當您學過循環之後,或在參加ACM這樣的比賽及使用在線評測系統的時候會經常用到這種寫法。
格式化輸出函數printf
printf函數叫做格式輸出函數,其功能是按照用戶指定的格式,把指定的數據輸出到屏幕上.printf函數的格式為:
printf(“格式控制字符串”,輸出表項);
其中格式控制字符串用來說明輸出表項中各輸出項的輸出格式(好比我要吃蘋果,告訴printf是做成罐頭吃還是直接吃)。輸出表項列出了要輸出的項,各輸出項之間用逗号分開。輸出表項也可以沒有,則表示輸出的是格式字符串本身。
格式控制字符串有兩種:格式字符串和非格式字符串。非格式字符串在輸出的時候原樣打印;格式字符串是以%打頭的字符串,在”%”後面跟不同格式字符,用來說明輸出數據的類型、形式、長度、小數位數等。格式字符串的形式為: % [輸出最小寬度] [.精度] [長度] 類型
例如,%d格式符表示 用十進制整形格式輸出。%f表示用實型格式輸出,%5.2f 格式表示輸出寬度為5(包括小數點),并包含2位小數。常用的輸出格式及含義如下:
格式字符
d , i 以十進制形式輸出有符号整數(正數不輸出符号)
O 以八進制形式輸出無符号整數(不輸出前綴0)
x 以十六進制形式輸出無符号整數(不輸出前綴0x)
U 以十進制形式輸出無符号整數
f 以小數形式輸出單、雙精度類型實數
e 以指數形式輸出單、雙精度實數
g 以%f或%e中較短輸出寬度的一種格式輸出單、雙精度實數
C 輸出單個字符
S 輸出字符串
關于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()中的用法:
假如您不想事先指定字段寬度,而是希望由程序來制定該值,那麼您可以在字段寬度部分使用*代替數字來達到目的,但是您也必須使用一個參數來告訴函數寬度的值是多少。具體的說,如果轉換說明符為%*d,那麼參數列表中應該包括一個*的值和一個d的值,來控制寬度和變量的值。該技術也可以和浮點值一起使用來指定精度和字段寬度。
您可以參考下面的例子:
/*使用可變寬度輸出字段*/
#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下運行過程及結果如下:
Please input number's width:
6
The number is: 256
Then please input width and precision:
8 3
Weight = 25.500
關于printf()的返回值
printf函數的返回值是返回所打印的字符的數目。如有輸出錯誤,那麼printf()會返回一個負數(printf()的一些老版本會有不同的值)。
輸入與輸出是基礎的C語言的代碼裡面所必須的,之後所涉及的一些簡單的項目和代碼都是需要用到的,這一章的學習大家要用心,加油,讓我們一起進步,我會幫助大家在我的經驗上期總結一些學習的方法和注意的知識點,有什麼不理解的歡迎私信哦,我也準備了一些資料幫助大家,歡迎大家滴滴。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!