- C語言程序設計教程
- 戴彥群 徐草草 溫愛紅主編
- 2484字
- 2020-08-21 13:19:52
1.4 標準輸入/輸出函數
輸入是從輸入設備(如鍵盤)向計算機輸入數據的過程;輸出是把程序的計算結果輸出到輸出設備(如顯示器)的過程。C語言沒有提供專門的輸入/輸出語句,是利用C標準函數庫中提供的輸入/輸出函數實現的,C語言輸入/輸出函數庫見附錄D。
C標準函數庫中專門的輸入/輸出函數很多,這些函數有格式輸入/輸出函數scanf()和printf(),字符輸入/輸出函數getchar()和putchar(),字符串輸入/輸出函數gets()和puts()等。這些函數的聲明構成一個名為stdio.h的輸入/輸出函數庫,用戶程序要使用輸入和輸出函數時,要在程序文件的開始位置添加如下的宏定義,把stdio庫包含到用戶程序:
#include<stdio.h>
然后在用戶程序中直接調用所需要的輸入/輸出函數即可。
1.4.1 格式化輸出函數printf()
(1)printf函數的調用格式
stdio庫提供的格式化輸出函數printf()的主要功能是向顯示器(標準輸出設備)輸出指定的若干個格式化的數據,適用于任意的數據類型。輸出值正常,返回輸出字節數;輸出值出錯,返回EOF(-1)。函數的一般調用格式為:
printf(格式控制字符串,輸出列表);
例如:
說明:
①格式控制字符串是用雙引號引起來的字符串,它包含如下三種信息:
·格式說明符:由“%”和格式字符組成,如%d、%f等。它總是由“%”開始,其作用是將輸出的數據轉換為指定的格式輸出。
·普通字符:即要原樣輸出的字符,一般為提示信息。如“printf("a=%d,b=%f\n",a,b);”中的“a= ,b= ”即為提示信息,是為了便于用戶更好地使用程序而加入的。
·轉義字符:輸出一些操作行為,如換行符等。
②“輸出列表”是需要輸出的一些數據項,可以是變量或表達式列表,其項數一般與控制參數中的格式轉換控制符個數相同,格式如下:
如變量a的值為128,則上述語句的輸出結果為:a=128。
(2)常用的格式控制字符
在printf()函數中常用的格式字符如表1-4所示。
表1-4 printf()函數中的格式字符

在printf()函數中除了這些常用的格式字符外,還可以在這些格式符前加以下幾種特定的附加修飾符,用于修飾輸出特定格式或數據類型,如表1-5所示。
表1-5 printf()函數中的附加格式修飾字符

(3)格式控制字符用法舉例
下面我們來看它們的具體用法。
①d格式符:用來輸出十進制帶符號整數,有以下幾種用法:
%d:按十進制整型數據的實際長度輸出。
%md或%-md:m為指定的輸出字段寬度為1個正整數。若實際數據的位數小于m,則左端補空格;若大于m,則按實際位數輸出。當m前有“-”號時,表示按m指定寬度左對齊,右端補空格。
%ld:輸出長整型數據,%mld輸出指定寬度的長整型數據。
②c格式符:用于輸出1個字符。
對于整數,只要它的值在0~255范圍內,也可以用字符形式輸出。
1個字符數據也可以轉換成相應的整型數據(ASCII值)輸出。
③s格式符:用于輸出1個字符串。有以下幾種用法:
%s:最常用格式,直接輸出串的內容。
%ms或%-ms:輸出的字符串占m列,如字符串本身長度大于m,則突破m的限制輸出字符串的全部內容;若串長小于m,則輸出的字符串左補空格。%-ms意義同上,但當串長小于m時,則輸出的字符串右補空格。
%m.ns或%-m.ns:輸出占m列,但只取串中左端的n個字符。這n個字符輸出在m列的右側,左補空格。%-m.ns中的m、n含義同上,但右補空格。而如果n>m時,m取n的值,即保證要求的n個字符輸出。
【例1-7】讀程序,理解printf函數指定格式輸出的用法。
/ *源程序1-7.C* / #include <stdio.h> void main() { int i=100,j=1; / * 定義基本整型變量 * / long int a=123456; / * 定義長整型變量 * / float f1,f2; f1=(float)2738.54;f2=(float)-3.012; char cl='A',c2='a'; printf("%-12x\t%o\t%5d\n",i,i,j); printf("%+12.3f\t\t%-6.0f\n",f1,f2); printf("%3c\t%c\n",cl,c2); printf("c=%ld\tc=%12ld\n",a,a); / * 輸出十進制長整數 * / printf("%3s,%7.3s,%.4s,%-5.2s\n","Super","Super","Super","Super"); }
本程序的運行結果為:
64 144 1 +2738.540 -3 Aa c=123456 c=123456 Super, Sup,Supe,Su
④o格式符:以八進制整數形式輸出。
⑤x格式符:以十六進制整數形式輸出。
⑥u格式符:用于輸出unsigned(無符號)型數據,以十進制整數形式輸出。
1.4.2 格式化輸入函數scanf()
stdio庫提供的scanf()函數可以用來從鍵盤(標準輸入設備)輸入任何類型的多個數據。輸入正常,返回讀取的代碼值;輸入出錯,返回EOF(-1)。
(1)scanf函數的調用格式
scanf()函數的一般調用形式為:
scanf(格式控制字符串,地址列表);
“格式控制字符串”的含義同printf()函數。
“地址列表”是由若干個地址組成的列表,用于接收輸入的數據。可以是變量的地址,或字符串的首地址等。
變量地址是由地址運算符“&”后接變量名組成的,例如,&a和&b分別表示了變量a和變量b的地址。&是一個取地址運算符,&a是一個表達式,其功能是求變量的地址。變量的地址是C編譯系統分配的,用戶不必關心具體的地址是多少。
(2)格式控制字符
scanf()函數與printf()函數中的格式字符基本相同,用法也基本相同,其差異見下面的說明。表1-6列出了scanf()函數中用到的格式字符,表1-7列出可以使用的附加修飾符。
表1-6 scanf()函數中的格式字符

表1-7 scanf()函數中的附加格式說明字符

對于unsigned類型的數據,在輸入時既可以用%u,也可以用%d,甚至%x、%o均可。輸入時可以指定數據所占的列數(域寬),系統將按它自動截取需要的數據。說明如下:
①scanf("a=%d b=%d ",&a1,&b1);
輸入時的格式:a=10 b=20↙ / * 普通字符,要原樣輸入 * /
說明:系統取10給變量a,20給變量b。用"%d%d%d"格式輸入時,不能用逗號(可用空格)作兩個輸入數據間的分隔符。
②scanf("%3d%2d",&a,&b);
輸入:123456 ↙
輸出:a=123,b=45
系統自動將123賦給a,45賦給b。也可用于字符型。
③scanf("%2d%*2d%d",&a,&b);
輸入:123456↙
輸出:a=12,b=56
說明:使用了“*”格式修飾符,則表示跳過它所指定的列數。則系統截取2位整數12賦給變量a,而跳過中間的兩位34,取最后的兩位56給變量b。
④輸入數據時不能規定數據的精度,如以下的輸入語句:
scanf("%7.2f",&a);
是不合法的。這樣做變量a根本無法得到正確的輸入。
1.4.3 字符輸入輸出函數
(1)字符輸入函數getchar()
getchar()函數的功能是接收從終端(鍵盤或系統指定的輸入設備)輸入的1個字符,它沒有參數,但從輸入設備中接收的字符通過函數返回值的形式得到。其基本格式為:
ch=getchar();
其中ch為字符型的變量(或整型變量)。程序執行完此語句后,ch中即存入了用戶從鍵盤上鍵入的字符。
(2)字符輸出函數putchar()
putchar()函數的作用是向終端輸出一個字符。其基本格式為:
putchar(c);
其用途是輸出字符型參數c的值。參數c通常為字符型變量或字符常量,也可以是整型變量或整型常量(對大于255的整數,則只取低位字節中的數據)。
【例1-8】從鍵盤輸入大寫字母,用小寫字母輸出。
/ *源程序1-8.C* / #include <stdio.h> void main() { char c1,c2; c1=getchar(); / * 調用getchar()函數從鍵盤接收一個字符,并將之賦給變量c1* / printf("%c,%d\n",c1,c1); / * 調用printf()函數格式輸出c1* / c2=c1+32; putchar(c2); / * 輸出字符變量c2中的數據,即字符'a'* / printf("%d\n",c2); putchar('\n'); / * 輸出換行符 * / }
程序的運行結果為:
輸入:A ? 輸出:A,65 a,97
- Unity 2020 By Example
- Getting Started with Citrix XenApp? 7.6
- Learning Apex Programming
- Android NDK Beginner’s Guide
- 深度強化學習算法與實踐:基于PyTorch的實現
- 嚴密系統設計:方法、趨勢與挑戰
- HTML5+CSS3網頁設計
- QGIS By Example
- Visual FoxPro程序設計習題集及實驗指導(第四版)
- 編程與類型系統
- Learning Apache Cassandra
- iPhone應用開發從入門到精通
- 后臺開發:核心技術與應用實踐
- 零代碼實戰:企業級應用搭建與案例詳解
- Elasticsearch搜索引擎構建入門與實戰