C語言輸入輸出函數總結

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.