C 輸入 & 輸出


當我們提到輸入時,這表示要向程式填入一些資料。輸入可以是以檔案的形式或從命令列進行。 C 語言提供了一系列內建的函數來讀取給定的輸入,並根據需要填入程式中。

當我們提到輸出時,這表示要在螢幕上、印表機上或任意檔案中顯示一些資料。 C 語言提供了一系列內建的函數來輸出資料到電腦螢幕和儲存資料到文字檔案或二進位檔案。

標準檔案

C 語言把所有的裝置都當作檔案。所以設備(例如顯示器)被處理的方式與檔案相同。以下三個檔案會在程式執行時自動打開,以便存取鍵盤和螢幕。

標準檔案檔案指標#裝置
標準輸入stdin鍵盤
標準輸出stdout 螢幕
標準錯誤stderr您的畫面
#

檔案指標是存取檔案的方式,本節將講解如何從螢幕讀取值以及如何把結果輸出到螢幕上。

getchar() & putchar() 函數

int getchar(void) 函數從螢幕讀取下一個可用的字符,並把它傳回為一個整數。這個函數在同一個時間內只會讀取一個單一的字元。您可以在循環內使用這個方法,以便從螢幕上讀取多個字元。

int putchar(int c) 函數把字元輸出到螢幕上,並傳回相同的字元。這個函數在同一個時間內只會輸出一個單一的字元。您可以在循環內使用這個方法,以便在螢幕上輸出多個字元。

請看下面的實例:

#include <stdio.h>int main( ){   int c;

   printf( "Enter a value :");
   c = getchar( );

   printf( "\nYou entered: ");
   putchar( c );   return 0;}

當上面的程式碼被編譯和執行時,它會等待您輸入一些文本,當您輸入一個文本並按下回車鍵時,程式會繼續並且只會讀取一個單一的字符,顯示如下:

$./a.out<b>Enter a value :</b> this is test<b>You entered:</b> t

gets() & puts() 函數

char *gets(char *s) 函數從stdin 讀取一行到s 所指向的緩衝區,直到一個終止符或EOF。

int puts(const char *s) 函數把字串 s 和一個尾隨的換行符號寫入到 stdout

#include <stdio.h>int main( ){   char str[100];

   printf( "Enter a value :");
   gets( str );

   printf( "\nYou entered: ");
   puts( str );   return 0;}

當上面的程式碼被編譯和執行時,它會等待您輸入一些文本,當您輸入一個文本並按下回車鍵時,程式會繼續並讀取一整行直到該行結束,顯示如下:

$./a.out<b>Enter a value :</b> this is test<b>You entered:</b> This is test

scanf() 和printf() 函數

int scanf(const char *format, ...) 函數從標準輸入流stdin 讀取輸入,並根據提供的format 來瀏覽輸入。

int printf(const char *format, ...) 函數將輸出寫入到標準輸出流  stdout ,並根據提供的格式產生輸出。

format 可以是一個簡單的常數字串,但是您可以分別指定%s、%d、%c、%f 等來輸出或讀取字串、整數、字符或浮點數。還有許多其他可用的格式選項,可以根據需要使用。如需了解完整的細節,可以查看這些函數的參考手冊。現在讓我們透過下面這個簡單的實例來加深理解:

#include <stdio.h>int main( ){   char str[100];   int i;

   printf( "Enter a value :");
   scanf("%s %d", str, &i);

   printf( "\nYou entered: %s %d ", str, i);   return 0;}

當上面的程式碼被編譯和執行時,它會等待您輸入一些文本,當您輸入一個文本並按下回車鍵時,程式會繼續並讀取輸入,顯示如下:

$./a.out<b>Enter a value :</b> seven 7<b>You entered:</b> seven 7

在這裡,應當指出的是,scanf() 期待輸入的格式與您給出的%s 和%d 相同,這意味著您必須提供有效的輸入,例如"string integer",如果您提供的是"string string" 或"integer integer",它會被視為錯誤的輸入。另外,在讀取字串時,只要遇到一個空格,scanf() 就會停止讀取,所以 "this is test" 對 scanf() 來說是三個字串。