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標頭檔案中。在這幾個函式中,格式輸入輸出的用途最多也最容易出問題,希望提起大家的注意。