Skip to content

輸入與輸出 Input and Output

本篇介紹C語言基本的輸入及輸出,會涵蓋基本的,以及包含基本型態的。不過型態後面才會講到,因此可以搭配看。

我想把這系列的文章當作是同學們可以參考、複習的一個地方,因此不會很循序漸進的教每個細節,取而代之,我會把一些概念整合起來讓各位可以方便實際使用。

以下任何例子,可以使用Online GDB來線上測試程式。

輸出 Output

基礎文字輸出

c
#include<stdio.h>
int main(){
	printf("Hello World");
}

我們可以看到第三行printf("Hello World");printf()是輸出函數,(通常)代表在執行畫面(終端畫面)輸出一段字。其中這個括號裡面可以寫文字、數字、變數、格式設定等。

而我們在這邊的示例中使用"Hello World",你會發現我們把字用雙引號框起來,因為在大部分的程式語言中,區隔「變數」與「文字」的方式,就是變數直接寫,而文字會用雙引號框起來,又稱作「字串」。

基礎數字輸出

程式碼

c
#include<stdio.h>
int main(){
	printf(8 + 9);
	printf("\n");
	printf("8 + 9");
}

執行結果

text
17
8 + 9

這個例子中,我們首先看到第三行,這邊我們的8 + 9並沒有用雙引號框起來,因此對於程式而言,它就是數字的型態,將8 + 9的結果17輸出。

第四行"\n" 意思是「換行」,C語言預設不會幫你進行換行,你可以試試看拿掉這行,那麼兩行輸出會連接在一起。

最後,第五行我們加上雙引號,因此對於程式而言,它就是單純的文字,而不是數字的計算。

格式及變數輸出 Output with Variables and Format

整數輸出

程式碼

c
#include<stdio.h>
int main(){
	int a = 3;
	printf("%d\n", a);
	printf("%d", 4);
}

執行結果

text
3
4

此例子中,第三行我們宣告一個整數int a = 3;,並且在第四行將這個值輸出。因為我們想要輸出一個整數,故使用%d

同理,我們也可以直接輸出一個數字4,如第五行所示。

整數格式

程式碼

c
#include<stdio.h>
int main(){
	int a = 3;
	printf("%3d\n", a);
	printf("%03d\n", a);
	printf("%-3d\n", a);
}

執行結果

text
  3
003
3

此例中,我們在%d中間增加格式的指定,3代表輸出至少3個字元長度、0代表前面不夠補0-代表靠左對齊(預設靠右對齊。)因此,此例的第三行輸出會看不出差異,您可以試試看在後面接著一個字,觀察變化,如printf("%-3d.\n", a);

小數輸出

程式碼

c
#include<stdio.h>
int main(){
	double a = 3.14;
	printf("%f\n", a);
	printf("%f", 4.2);
}

執行結果

text
3.140000
4.200000

此例與整數例子相似,這裡不做多餘的解釋。值得注意的是,在C語言中,小數的輸出預設是小數點後六位數,不夠的會補0。另外,這邊我們有兩個常用來宣告小數的關鍵字,一個是float代表浮點數,另一個是double代表(兩)倍精準度的浮點數。

小數格式

程式碼

c
#include<stdio.h>
int main(){
	double a = 3.14;
	printf("%.1f\n", a);
	printf("%5.1f", a);
}

執行結果

text
3.1
  3.1

此例中,我設定了.15.1兩種。在小數點後面的數字代表要保留小數幾位數,而在小數點前面的數字則代表輸出至少幾個字元長。 因此第五行的意思是小數點一位數,並且至少輸出五個字元長度,其中,小數點也算一個長度。

字元輸出

程式碼

c
#include<stdio.h>
int main(){
	char a = 'b';
	printf("%c\n", a);
	printf("%c", a+1);
}

執行結果

text
b
c

值得注意的是,C語言中,可以直接將字元及ASCII互換,因此當我們在第五行使用a+1時,實際上就是將b的ASCII加一之後再轉換回字元。

字串輸出

程式碼

c
#include<stdio.h>
int main(){
	char a[99] = "abcd";
	printf("%s\n", a);
	printf("%5s", a);
}

執行結果

text
abcd
 abcd

輸入 Input

在C語言輸入前,必須先設好變數,才能讓變數去承接使用者的輸入。這裡我們簡單用scanf作為範例。

程式碼

c
#include<stdio.h>
int main(){
	int a;
	scanf("%d", &a);
	printf("%d", a+1);
}

執行結果

text
(輸入 2 之後按下 Enter)
3

此例中我們先宣告了一個整數a,並且用scanf指定要輸入一個整數%d,並讓這個整數儲存在變數a裡面。需要注意的是,我們在a的前方加了一個&(and)的符號。這是因為對於C語言而言,要在執行時輸入資料,必須讓他知道「在記憶體的的哪裡」,也就是「位址」,而這個&就是去取得這a的位址。有意研究者可以繼續往下深究,初學者可以當作一個簡單的「規定」即可。

格式輸入 Input with Format

這裡舉例簡單的情況,假設今天輸入有特定規則,這時候我們一樣使用scanf來去對應規則即可。

程式碼

c
#include<stdio.h>
int main(){
	int a, b;
	scanf("%d, %d", &a, &b);
	printf("a = %d, b = %d", a, b);
}

執行結果

text
(輸入 2, 3 之後按下 Enter)
a = 2, b = 3

此例中,假設您的輸入格式是數字, 數字,那麼在scanf中也這樣設定即可。若您是空格隔開如數字 數字,則可以設定為scanf("%d %d", &a, &b);的樣式。