簡介
在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()