1. 程式人生 > >C語言輸入輸出函式總結

C語言輸入輸出函式總結

在C語言中,輸入輸出函式有著相當重要的地位,它是我們的程式與使用者互動的唯一途徑,現在我就將C語言中比較常見的幾個輸入輸出函式介紹給大家,以下這些講解都是針對VC除錯平臺。

(一)   格式化輸入輸出函式

(1)scanf( )格式化輸入函式

格式輸入函式scanf( )函式,它的格式為scanf(“格式字串”,輸入列表)。“格式字串”包含三種類型的字元:a、格式字元,以%開頭的字元,用以說明輸入列表的資料以何種型別及格式的形式輸入。b、普通字元,要求在輸入時必須原樣一起輸入的字元。C、空白字元(空格、跳格鍵、回車鍵)作為相鄰兩個資料的預設分隔符。

在scanf( )函式中有以下地方需要注意:

[1]      在scanf()函式中的格式字串不存在轉義字元,所以:格式字串中的字元除了格式字元外全部都要原樣輸入。

如:

int a;

scanf(“%d/n”,&a);如果我們想把10賦值給a,就需要在鍵盤上輸入的是:

10/n回車,才能把10賦值給a,這裡/n已經不是轉義字元,而是普通字元。

[2]      輸入列表的變數如果是基本型別(即整型、實型、字元型)一定要使用取地址符&(輸入字串到字元陣列的情況除外),而且&後必須是變數,不允許是常量或表示式。

如:

int a,b;

scanf("%d%d",a,b); 這是不合法的。Scanf函式的作用是:按照a、b在記憶體的地址將a、b的值存進去。“&a”指a在記憶體中的地址。

[3]      輸入資料時,企圖規定精度

float a;

scanf("%.2f",&a);

這樣做是不合法的,輸入資料時不能規定精度,這裡要記住一個程式是不能控制操作它的人來輸入資料的精度的。

[4]      輸入資料的方式與要求不符

①     scanf("%d%d",&a,&b);

輸入時,不能用逗號作兩個資料間的分隔符,如下面輸入不合法:3,4 輸入資料時,在兩個資料之間以一個或多個空格間隔,也可用回車鍵,跳格鍵tab。

②scanf("%d,%d",&a,&b);

C規定:如果在“格式控制”字串中除了格式說明以外還有其它字元,則在輸入資料時應輸入與這些字元相同的字元。下面輸入是合法的:3,4

此時不用逗號而用空格或其它字元是不對的。3 4

又如:scanf("a=%d,b=%d",&a,&b);

輸入應如以下形式:a=3,b=4

[5]      輸入字元的格式與要求不一致

在用“%c”格式輸入字元時,“空格字元”和“轉義字元”都作為有效字元輸入。

scanf("%c%c%c",&c1,&c2,&c3);

如輸入a b c

字元“a”送給c1,字元“ ”送給c2,字元“b”送給c3,因為%c只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔。

[6]     使用格式字元”%c”錄入單個字元時,空格和回車鍵等字元都會作為有效字元輸入,所以需要注意fflush(stdin)的使用。

[7]      注意輸入列表中的元素的個數要與格式字串中的格式字元個數相同。

[8]      在輸入長整形資料和雙精度浮點數時,必須使用長度修飾符”l”。

[9]      不要在不該使用取地址符的地方使用取地址符。

如:char str[10];

Scanf(%c,&str);這裡不應該加取地址符&。

(2)printf( )格式輸出函式

格式輸出函式printf( ),它的格式為printf(“格式字串”,輸出列表)。這裡的格式字串也包含三種類型的字元,但這裡和scanf( )函式的字元稍有不同。這三種類型的字元分別是:a、格式字元,以%開頭的字元,用以說明輸出列表的資料以何種格式的形式輸出。B、轉義字元,提供特殊的格式化控制,由一個“/”和一個字元組成。反斜槓會使printf( )函式以特殊的方式解釋一個字元。C、普通字元,除格式字元和轉義字元外的其他字元。

在printf( )函式中有以下地方需要注意:

[1]      輸出列表由若干個輸出項組成,輸出項可以是常量、變數,也可以是表示式。

[2]      格式字串中的格式字元要與後邊輸出列表中的元素型別一一對應。

如:

       float a=1.9999;

       printf("%d",a);最終的輸出結果是一些亂碼。

再如:

       int a=12;

       printf("%f",a);最終的輸出結果是0.000000,這裡沒有進行型別轉換。

但是,如果想把上面的整數a以浮點數的形式輸出,必須進行強制型別轉換。如:

       int a=12;

       printf("%f",(float)a);輸出的結果是12.000000。

[3]      格式字串中的格式字元的個數要與輸出列表中的元素個數相同。

如:      

int a=12;

       printf("%d, %d",a);將在螢幕上輸出一個12以及一個亂碼。

[4]      在以%.nf這樣的格式進行輸出浮點數時,有四捨五入。

如:

float a=1.9999;

printf(“%.2f”,a);最終的輸出結果是2.00。

[5]      長度修飾符“l”在輸出長整形資料時可不要,因為在VC中,long和int佔用的位元組長度都是4,所有可以不加上“l”。

[6]      格式符%±nd中,n表示一個十進位制整數輸出時在螢幕上佔n個字元的寬度,如果n前面是+號,則表示輸出的整數右對齊,那麼輸出的整數左邊補空格;如果n前面是-號,則表示輸出的整數左對齊,輸出的整數右邊補空格。

[7]      在-128~127之間的整數可以以字元的格式輸出,字元也可以以整型的格式輸出。

如:

       int a=97;

       printf("%c",a);輸出的結果是’a’,因為‘a’儲存在記憶體中是以ASCII碼的形式儲存的。

再如:

char a='a';

printf("%d",a);輸出的結果是97,原因同上。

(二)   單字元輸入、輸出函式

C語言提供了兩個無格式控制的,專門用於輸入、輸出單個字元的函式getchar( )和putchar( )。

(1)       單字元輸入函式getchar( )

[1]      getchar( )函式沒有引數,有返回值,返回的就是輸入的那個字元。

[2]      getchar( )函式一次只能接收一個字元。

[3]      getchar( )函式同樣將空格和回車鍵等字元都會作為有效字元輸入,所以注意和fflush(stdin)函式的結合使用。

(2)       單字元輸出函式putchar( )

[1]    putchar()函式有引數,無返回值。引數就是它要輸出的那個字元,可以是字元變數或著字元常量

[2]    putchar()函式一次向顯示器輸出一個字元。

(三)   字串輸入、輸出函式

C語言還提供了兩個無格式控制的專門對字串處理的函式,gets( )和puts( )。

(1)       gets( )用來接收使用者輸入的字串,這是個有引數的函式,引數是一個字元陣列型別,輸入的字串通過傳址的方式傳到這個字元陣列中。

(2)       puts()用來向用戶顯示一個字串,它需要一個字串引數,顯示該引數並自動換行。

如:

puts(“hello, world.”);與printf(“hello,world./n”);的效果相同,如果是puts(“hello.world./n”)則要輸出兩個換行。也就是說,puts( )中的字串可以包含轉義字元。

輸入字串:

scanf("%s",in_buff);

——可以格式化輸入;第二個引數是地址,可以是字元指標或者字元陣列;不提供字元陣列資料越界檢查;以回車結束輸入。

gets(in_buff);

——引數為地址,可以使字元指標或者字元陣列;不提供字元陣列越界檢查;以回車結束輸入。

fgets(in_buff,BUFFER_SIZE + 1,stdin);

——引數1為字元指著或者字元陣列,引數2為要輸入的字元個數,+1表示字串結束標誌,引數3為標準是輸入;提供越界檢查,以buffer_size+1為標準;以回車結束輸入。

輸入字元:

getch();

——從控制檯讀取一個字元,但是不回顯在螢幕上;不需要回車結束。

getche();

——從控制檯讀取一個字元,回顯螢幕;不需要回車結束。

getchar();

——從控制檯讀取一個字元,回顯螢幕;需要回車結束(如果連續使用該函式,要注意下次呼叫該函式,會讀取上次輸入的回車符)。

scanf("%c",char *);

——從控制檯讀取一個字元,回顯螢幕;需要回車結束(注意事項同上)。

這就是C語言中常用到的幾個輸入輸出函式,而且這幾個函式都包含在stdio.h標頭檔案中。在這幾個函式中,格式輸入輸出的用途最多也最容易出問題,希望提起大家的注意。