簡介
在C語言裡面,標準的輸入輸出是由標頭檔stdio所提供的
這也是為什麼程式最開始都要寫#include<stdio.h>的原因
stdio是standard input/output的縮寫
裡面規範了所有關於輸入輸出的函數與規定
getchar、putchar
如果只想取得使用者輸入的字元,可以使用getchar(),這函數會直接取得使用者的輸入並回傳
如果只要輸出一個字元,可以使用putchar(),這函數會將一個字元顯示在螢幕上
以下是getchar、putchar範例程式
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main(void) {
char c; printf("請輸入一個字元:"); c = getchar(); putchar(c); putchar('\n'); return 0;
}
|
執行結果
請輸入一個字元:X
X
gets、puts
如果你輸入超過兩個字元,getchar()只會讀取第一個字元,並將其餘字元留在緩衝區,只到下一次的getchar()
如果一次輸入多個字元,也就是字串,可以使用gets(),這函數會取得使用者輸入的字串,不包括按下enter的換行符號
而想將輸入的字串一次輸出的話,可以使用puts(),這函數會輸出文字後並且換行
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h>
int main(void) {
char str[20]; puts("請輸入字串:"); gets(str); puts("輸入的字串為:"); puts(str); return 0;
}
|
執行結果
請輸入字串:
Hello
輸入的字串為:
Hello
scanf、printf#
如果你想輸入其他型態的數值,那就需要使用scanf,搭配格式指定字與取址運算子(&)指定數值給變數
以下是格式指定字跟說明
格式指定字 |
說明 |
%c |
字元 |
%d |
整數(10進位) |
%o |
整數(8進位) |
%u |
無號整數 |
%x, %X |
整數(16進位) |
%f |
單精度浮點數 |
%lf |
雙精度浮點數 |
%s |
字串 |
以下是輸入的範例程式
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include <stdio.h>
int main(void) {
int input; printf("請輸入數字:"); scanf("%d", &input); printf("您輸入的數字:%d\n", input); return 0;
}
|
執行結果
請輸入數字:100
您輸入的數字:100
scanf可以一次指定多個值,也可以指定輸入的格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h>
int main(void) {
int number1, number2; printf("請輸入兩個數字,中間使用空白區隔):"); scanf("%d %d", &number1, &number2); printf("您輸入的數字總和:%d + %d = %d\n", number1, number2,number1+number2); printf("請輸入兩個數字,中間使用*號區隔):"); scanf("%d*%d", &number1, &number2); printf("您輸入的數字相乘為:%d * %d = %d\n", number1, number2,number1*number2); return 0;
}
|
執行結果
請輸入兩個數字,中間使用空白區隔):10 1
您輸入的數字總和:10 + 1 = 11
請輸入兩個數字,中間使用*號區隔):5*2
您輸入的數字相乘為:5 * 2 = 10
如果想輸入字串以外的數值,就需要使用printf來顯示,函數執行過後會回傳輸出的字元數
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
int main(void) {
int count = printf("Hello World!\n"); printf("%d\n", count); return 0;
}
|
執行結果
Hello World!
13
包括空白與換行總共13個字元被顯示在螢幕上
printf也需要格式指令碼來幫忙輸出
格式指定字 |
說明 |
%c |
字元 |
%d |
整數(10進位) |
%o |
整數(8進位) |
%u |
無號整數 |
%x, %X |
整數(16進位) |
%f |
浮點數輸出 |
%e, %E |
使用科學記號顯示浮點數 |
%g, %G |
浮點數輸出,取%f或%e(%f或%E),看哪個表示精簡 |
%% |
顯示 % |
%s |
字串 |
基本上什麼型態就需要對應的格式指令碼,以下是格式指令碼範例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <stdio.h>
int main(void) {
printf("字元 %c\n", 'A'); printf("字元編碼 %d\n", 'A'); printf("字元編碼 %c\n", 65); printf("十進位整數 %d\n", 15); printf("八進位整數 %o\n", 15); printf("十六進位整數 %X\n", 15); printf("十六進位整數 %x\n", 15); printf("科學記號 %f\n", 0.001234); printf("科學記號 %e\n", 0.001234); printf("科學記號 %g\n", 0.000000001234); printf("科學記號 %g\n", 0.1234); return 0;
}
|
執行結果
字元 A
字元編碼 65
字元編碼 A
十進位整數 15
八進位整數 17
十六進位整數 F
十六進位整數 f
科學記號 0.001234
科學記號 1.234000e-003
科學記號 1.234e-009
科學記號 0.1234
另外輸出的細節,例如指定小數點輸出到第幾位,就要寫%.2f,表示輸出到小數點以下第二位
若在前面加個數字表示要輸出多少寬度,例如%10.2f表示預留10個字元寬度,不足部分補上空白
如果在前面加上負號,表示向左對齊,否則向右對齊,例如:
1 2 3 4 5 6 7 8 9 10
| #include <stdio.h>
int main(void) {
printf("example:%10.2f\n", 3.14159); printf("example:%-10.2f\n", 3.14159); return 0;
}
|
執行結果
example: 3.14
example:3.14
字元寬度也可以由變數指定,例如%*d,而之後的第一個引數就會成為字元寬度
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <stdio.h> #include <stdlib.h>
int main(void) { int width,num; printf("請輸入字元寬度:"); scanf("%d",&width); printf("請輸入數字:"); scanf("%d",&num); printf("num = %*d\n", width, num); return 0; }
|
執行結果
請輸入字元寬度:5
請輸入數字:100
num = 100
參考
- C語言
- putchar()、getchar()、puts()、gets()
- printf() 與 scanf()