C 輸入與輸出函數

你好,未來的編程師們!今天,我們將踏上一段令人興奮的旅程,進入 C 語言中的輸入與輸出(I/O)世界。作為你們友好的鄰居計算機老師,我在這裡指引你們走過這個編程的基本環節。所以,拿起你們的虛擬筆記本,讓我們一起潛入水中!

C - Input & Output

C 語言中的標準文件

在我們開始在鍵盤上敲敲打打之前,我們來討論一些基本概念:C 語言中的標準文件。你會發現,當你運行一個 C 程序時,它會自動為你打開三個文件。這就像有三個有用的助手已經準備好來管理你的程序與外部世界的通信。

  1. stdin(標準輸入)
  2. stdout(標準輸出)
  3. stderr(標準錯誤)

這些文件是程序與用戶和系統之間的通道。將 stdin 想像成程序的耳朵,stdout 想像成它的嘴巴,而 stderr 則是在出錯時大聲呼喊的方式。酷炫吧?

輸入與輸出函數的類型

現在,讓我們來討論我們用來與這些文件交互的工具。在 C 語言中,我們主要有兩種類型的 I/O 函數:

  1. 未格式化輸入/輸出函數
  2. 格式化輸入/輸出函數

未格式化函數處理原始數據,而格式化函數則讓我們指定數據的格式。這就像吃白米(未格式化)和一份美妙排列的美食(格式化)之間的差異。兩者都能完成任務,但後者給你更多對展示的控制!

未格式化字符輸入與輸出函數:getchar()putchar()

讓我們從未格式化字符 I/O 開始。認識我們的前兩個函數:getchar()putchar()

getchar()

getchar() 從標準輸入(通常是你的鍵盤)讀取一個字符。它就像一個有耐心的聽眾,等待你輸入一個字符。

#include <stdio.h>

int main() {
char ch;
printf("Enter a character: ");
ch = getchar();
printf("You entered: ");
putchar(ch);
return 0;
}

在這個例子中,getchar() 等待你輸入一個字符,並將其存儲在 ch 中。這簡單,但非常強大!

putchar()

putchar()getchar() 的對應函數。它將一個字符輸出到標準輸出(通常是你的屏幕)。這就像一個鎮上的宣傳員一次宣布一個字母。

#include <stdio.h>

int main() {
char ch = 'A';
printf("Printing a character: ");
putchar(ch);
return 0;
}

在這裡,putchar(ch) 將字符 'A' 顯示在你的屏幕上。簡單而有效!

格式化字符串輸入與輸出函數:gets(), fgets(), puts()fputs()

現在,讓我們升級並討論字符串 I/O。這些函數處理整個字符串,而不僅僅是單個字符。

gets()fgets()

gets() 從 stdin 讀取一行到緩存區。然而,它因為不檢查緩存區溢出而被認為是不安全的。這就是為什麼我們更喜歡它的更安全的表親 fgets()

#include <stdio.h>

int main() {
char name[50];
printf("Enter your name: ");
fgets(name, sizeof(name), stdin);
printf("Hello, %s", name);
return 0;
}

在這個例子中,fgets() 讀取一行文字(你的名字)到 name 数组中。它更安全,因為我們指定了要讀取的最大字符數。

puts()fputs()

puts() 將字符串寫入 stdout 並附加換行符。它的文件流對應函數是 fputs()

#include <stdio.h>

int main() {
char greeting[] = "Hello, World!";
puts(greeting);  // 輸出: Hello, World!(帶換行符)
fputs(greeting, stdout);  // 輸出: Hello, World!(不帶換行符)
return 0;
}

puts() 自動添加換行符,而 fputs() 給你更多的控制。

格式化輸入與輸出函數:scanf()printf()

現在,我們來介紹 C 語言中 I/O 的重量級選手:scanf()printf()。這些函數就像瑞士軍刀一樣多用途且強大。

scanf()

scanf() 從 stdin 讀取格式化輸入。它就像一個挑剔的食客,只接受準備得恰到好處的食物。

#include <stdio.h>

int main() {
int age;
float height;
printf("Enter your age and height: ");
scanf("%d %f", &age, &height);
printf("You are %d years old and %.2f meters tall.\n", age, height);
return 0;
}

在這裡,scanf() 從輸入中讀取一個整數(%d)和一個浮點數(%f)。&ageheight 之前是關鍵的——它告訴 scanf() 將值存儲在哪裡。

printf()

printf()scanf() 的輸出對應函數。它就像一個熟練的說故事者,將你的數據編織成美麗的格式化字符串。

#include <stdio.h>

int main() {
int apples = 5;
float price = 0.75;
printf("I have %d apples, each costing $%.2f.\n", apples, price);
return 0;
}

在這個例子中,printf() 將我們的數據格式化成一個讀者友好的句子。

C 語言中的格式指定符

格式指定符是使 scanf()printf() 如此強大的秘密調味料。它們就像指示這些函數如何解釋或呈現數據的說明。

以下是一些常見的格式指定符:

指定符 數據類型
%d 整數
%f 浮點數
%c 字符
%s 字符串
%lf 雙精度浮點數
%x 十六進制
%o 八進制
%p 指針

記住,你可以修改這些指定符。例如,%.2f 會打印一個有兩位小數的浮點數,而 %5d 會在一個字段寬度為 5 個字符的情況下打印一個整數。

這就是 C 語言中輸入與輸出的基礎。記住,熟能生巧。所以,出去開始編程吧!誰知道呢?也許你會創造出技術界的下一個大事件。下次見,快樂編程!

Credits: Image by storyset