字串的輸入輸出函式總結
字元資料的輸入輸出
1.putchar 函式(字元輸出函式)
putchar 函式是字元輸出函式, 其功能是在顯示器上輸出單個字元。其一般形式為:putchar(字元變數).
2.getchar函式(鍵盤輸入函式)
getchar函式的功能是從鍵盤上輸入一個字元。其一般形式為:getchar();通常把輸入的字元賦予一個字元變數,構成賦值語句,如:char c; c=getchar()。
3.scanf("%c",&s)
讀取單個字元,前導空白字元並不跳過,字元後面不會新增NUL位元組。
需要注意的一點是getchar()函式的返回值為整數
例:
#include<stdio.h>
main()
{
char c;
while((c=getchar())!=EOF)
putchar(c);
}
getchar()函式一般情況下返回的是標準輸入檔案中的下一個字元,當沒有輸入時返回EOF(一個在標頭檔案stdio.h中被定義的值,不同於任何字元)。程式中變數c被定義為char型,這意味著c無法容下所有可能的字元,特別是EOF。程式的結果要麼取的是截斷的c,要麼取不到EOF,程式陷入死迴圈。
字串的輸入
1.gets()
gets() (代表get string),使用地址作為引數,它從系統的標準輸入裝置(通常是鍵盤)獲得一個字串,直到遇到一個換行符(\n)結束,並
例:
char name[81]; /*分配空間*/
printf("Hi ,what is your name?");
gets(name);
printf("%s\n",name);
返回值:如果讀入正常,則返回的是讀入字串的地址(即一個指向char型的指標),如果出錯或gets()遇到檔案結尾,則返回一個空(或0)地址。這個空地址被稱為空指標,並用stdio.h裡定義的常量NULL來表示。
因此gets()中還加入了一些錯誤檢測,這是它可以很方便的以如下形式使用:
while(gets(name) != NULL)
這樣的指令使您既可以檢查是否到了檔案結尾,有可以讀取一個值。如果遇到了檔案結尾,name中什麼也不會讀入。
2.fgets()
gets()的一個不足時它不檢查預留儲存區是否能夠容納時間輸入的資料。多出來的字元簡單的演繹出到相鄰的記憶體區。fgets()函式改進了這個問題,它讓您指定最大讀入字元數。fgets()和gets()有三個方面不同:
(1)需要第二個引數來說明最大讀入字元數。如果這個引數值為n,fgets()就會讀取最多n-1個字元或者讀完一個換行符為止,有這兩者中最先滿足的那個來結束輸入。
(2)如果fgets()讀到換行符,就會把它存到字串裡,而不是像gets()那樣丟棄它。
(3)它還需要第三個引數來說明讀哪一個檔案。從鍵盤上讀資料時,可以使用stdin作為該引數,這個識別符號在stdio.h中定義。
例:
char name[81];
char *ptr;
ptr = fgets(name,81,stdin);
printf("%s",ptr);
3.scanf()函式
scanf()函式使用%s格式讀入一個字串。scanf()使用兩種方法決定輸入結束。無論那種方法,字串都是以遇到的第一個非空白字元開始。如果使用%s格式,字串讀到(但不包含)下一個空白字元(空格,製表符或換行符)。如果指定了欄位寬度,比如%10s,scanf()會讀入10個字元或知道遇到第一個空白字元,由二者中最先滿足的哪一個終止輸入。
scanf()函式返回一個整數值,這個值是成功讀取的專案數;或者當遇到檔案結束時返回EOF。
4.
while((s[i++]=getchar())!='\n');
s[i-1] = '\0';
字串的輸出:puts(),fputs(),printf()
1.puts()函式
puts()函式使用很簡單,只需要給出字串引數的地址。
例:
char *name = "hellow wold";
puts(name);
puts()函式顯示字串時自動新增一個換行符。puts()輸出時遇到空字元(\0)停止,所以應確保輸出的字串中有空字元。
2.fputs()函式
fputs()函式是gets()的面向檔案版本。兩者之間的主要區別:
fputs()需要兩個引數來說明要寫的檔案。可以使用stdout作為引數來進行那個輸出顯示,stdout在stdio.h中定義
與puts()不同,fputs()並不為輸出自動新增換行符。