學習書籍: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 只有接收字元而已。