C 語言學習筆記 (三):格式化的輸出與輸入
學習書籍:C 語言學習手冊 第四版。作者: 洪維恩
這是一篇記錄自己學習 C 語言的過程,算是給自己看的筆記,所以這裡面的內容,是我整理書中我認為重要的部分,然後用自己的方式重新寫一遍,如果有圖,我會理解完,再自己畫出來,內容肯定會和課本上有出入,若有錯誤,或是理解錯的地方,希望能讓我知道。
在上一篇介紹中,講到 C 語言的資料型態,這篇要來學習如何將這些不同型態的變數,透過內建函式給輸出出來,或者是輸入到程式中。
輸出函數 printf
printf() 是 C 語言中最常見的函數。使用這個函數可以印出各種資訊。
printf("格式字串", 項目1, 項目2, , ...);
在需要印出的字串中,必須用雙引號包起來,我們稱做「格式字串」,而「項目1」、「項目2」可以放置要顯示的變數或是算式。
範例:
#include<stdio.h>
#include<stdlib.h>
int main(){
int num;
printf("I have %d computer.", num);
return 0;
}
printf 常用的格式碼
格式碼 | 說明 |
---|---|
%c | 字元 |
%d | 整數 |
%f | 浮點數 (小數點形式) |
%e | 浮點數 (指數 e 形式) |
%s | 字串 |
%ld | 長整數 |
%% | 百分比 |
%o | 無號八進位整數 |
%u | 無號十進位整數 |
%x | 無號十六進位整數 |
控制輸出的欄位寬度
格式碼都是用「百分比 % 」為開頭,要固定欄位寬度可以在 % 後面接上數字,例如:
#include<stdio.h>
#include<stdlib.h>
int main(){
int num;
num = 100;
printf("num:%10d", num); // %10d 方式來印出 100
return 0;
}
輸出結果:
num: 100
上面顯示的整數用法,如果是帶有小數點的 "%f" 呢?
以下面範例為例,定義格式碼為 "%10.4f" 時,後面的 「.4」代表輸出至小數點第四位。
#include<stdio.h>
#include<stdlib.h>
int main(){
float num;
num = 100;
printf("num:%10.4f", num); // %10.4f 方式來印出 100
return 0;
}
輸出結果:
num: 100.0000
printf 的修飾子
除了控制寬度,也可以控制靠左或靠右,例如:
#include<stdio.h>
#include<stdlib.h>
int main(){
int num;
num = 100;
printf("num:%10d", num); // 靠右
printf("num:%-10d", num); // 靠左
return 0;
}
輸出結果:
num: 100
num:100
修飾子 | 說明 |
---|---|
– | 靠左對齊 |
+ | 將數值正負號顯示出來 |
0 | 固定欄位寬度前面的空白處補上零 |
空白 | 數值為正,留下空白;為負,顯示負號 |
常用的跳脫序列
跳脫序列 | 代表意義 |
---|---|
\n | 換行 |
\r | 歸位 |
\ | 反斜線 |
\/ | 反斜線 |
\’ | 單引號 |
\” | 雙引號 |
\t | 跳格 |
\b | 倒退一格 |
\0 | 字串結束字元 |
\a | 警告音 |
\d | ASCII碼 (8 進位) |
\x | ASCII碼 (16 進位) |
輸入函數 scanf
scanf("格式字串", &變數1, &變數2, , ...);
此函數中,雙引號為「格式字串」,內容為欲輸入的資料格式碼,而「&變數1」、「&變數2」是用來存放資料。
Note:
變數前面要加上 &,因為 scanf() 要把輸入資料存到變數時,是藉由變數位址來傳遞,因此 scanf() 的引數也必須是位址。
下面為 scanf() 的最基本範例,輸入一個整數的方式。
#include<stdio.h>
#include<stdlib.h>
int main(){
int num;
printf("Enter: ");
scanf("%d", &num);
printf("%d", num);
return 0;
}
scanf 的格式碼
格式碼 | 說明 |
---|---|
%c | 字元 |
%d | 整數 |
%f | 浮點數 |
%s | 字串 |
%ld | 長整數 |
%o | 無號八進位整數 |
%x | 無號十六進位整數 |
輸入多個資料的方法
使用空格
#include<stdio.h>
#include<stdlib.h>
int main(){
int num1, num2;
printf("Enter: ");
scanf("%d %d", &num1, &num2);
printf("%d\n", num1);
printf("%d\n", num2);
return 0;
}
使用逗號
#include<stdio.h>
#include<stdlib.h>
int main(){
int num1, num2;
printf("Enter: ");
scanf("%d,%d", &num1, &num2);
printf("%d\n", num1);
printf("%d\n", num2);
return 0;
}
輸入字元
scanf 會讀取第一個輸入字元。
#include<stdio.h>
#include<stdlib.h>
int main(){
char ch;
printf("Enter: ");
scanf("%c", ch);
printf("%c\n", ch);
return 0;
}
輸入字串
輸入字串之前,要先定義出字串陣列,方法如下:
char 字串變數名稱[字串的長度];
例如:我們宣告長度為 10 個字元的字串
char str[10]; // 宣告出可容納 10 個字元的字串
輸入字串的方式
#include<stdio.h>
#include<stdlib.h>
int main(){
char str[10];
printf("Enter: ");
scanf("%s", &str);
printf("%s\n", str);
return 0;
}
其他輸入及輸出的方法
除了 printf() 以及 scanf() 之外,還有像是 getchar()、putchar()、getch()、getche()。
getchar():讓使用者輸入一個字元
putchar():在螢幕上顯示一個字元
#include<stdio.h>
#include<stdlib.h>
int main(){
char str[10];
printf("Enter: ");
ch = getchar(); // 輸入一個字元到變數 ch 中
putchar(ch); // 輸出 ch 的變數
return 0;
}
getch() 與 getche() 函數,跟 getchar() 雷同,只是這兩個函數接收到字元後,就自動接收字元,不用等使用者輸入 enter。
而 getch() 與 getche() 函數,這兩者差別接收完是否會直接顯示字元出來,在 getche 的 e 指的是 echo,所以接收到字元會立刻顯示在螢幕上,getch 只有接收字元而已。