資料的輸入與輸出
在 C 語言中,我們常常利用兩個函式 printf() 與 scanf() 進行資料的輸入與輸出。
在本節中我們會詳細描述其用法。
printf()
printf() 的目的在於輸出格式化的資料到標準輸出裝置(通常為螢幕)。
此函式被定義於 stdio.h,與第二章第一節:程式基礎架構中的 puts()相同。
以下列舉最簡單的 printf() 用法。
#include <stdio.h>
int main()
{
printf("Hello World");
return 0;
}
在上述範例中,printf() 同等於 puts() 這個函式,其結果都會在標準輸出裝置輸出 Hello World 這段文字。
與 puts() 相比更加方便的是,printf() 可以拿來輸出變數,其用法範例如下。
#include <stdio.h>
int main()
{
int number = 10;
printf("I have a number, the number is: %d", number);
return 0;
}
在 printf() 中,我們可以利用 %d 這個格式符(format specifier)表示這段文字中可以置入整數,而這個整數即為變數 number。
值得注意的是,如果變數不是整數,就要使用不同的格式符。
以下舉例輸出 char
#include <stdio.h>
int main()
{
char character = 'A';
printf("I have a character, the character is: %c", character);
return 0;
}
格式符(僅供查表參考)
printf() 的格式符原型
%[flags][width][.precision][length]specifier
中括號中的 flags 、 width、 precision 及 length 表示可以省略。
| specifier | 輸出 |
|---|---|
| d, i | 有號整數 |
| u | 無號整數 |
| o | 無號八進位數 |
| x, X | 無號十六進位數(小寫/大寫) |
| f, F | 浮點數(小寫/大寫) |
| e, E | 科學表示法(小寫/大寫) |
| g, G | 最短表示法(小寫/大寫) |
| a, A | 十六進位浮點數(小寫/大寫) |
| c | 字元 |
| s | 字串 |
| p | 記憶體位址 |
| n | 沒有輸出,其參數必須為有號整數 |
| % | % |
| flags | 敘述 |
|---|---|
| - | 向左對齊 |
| + | 在數字輸出中顯示 + 或 - 號 |
| (空白鍵) | 正數會起始於空白字元 |
| # | 對於八進位輸出(o),會在前方加入 0 對於十六進位輸出,會在前方加入 0x 或 0X 對於浮點數輸出(a, A, e, E, f, F, g 或 g),總是顯示其小數點 |
| 0 | 在有 width 格式符的情況下,用 0 代替空格 |
| width | 敘述 |
|---|---|
| (數值) | 最少顯示的字元數,若輸出少於此數值,則會用空白補齊 |
| * | 利用參數決定 width 值 |
| .precision | 敘述 |
|---|---|
| .(數值) | 對於整數(d, i, o, u, x, X),指定輸出的最小位數,如果要輸出的值小於此數值,則前方以 0 填充;如果要輸出的值大於此數值,輸出也不會被截斷。 對於 a, A, e, E, f 及 F,此數值代表輸出小數點後的位數值(預設為 6)。 對於 g 及 G,此數值代表將會被輸出的最大有效數值。 對於 s,表示最大會被輸出的字元數。 |
| * | 利用參數決定 .precision 值 |
| specifier | |||||||
|---|---|---|---|---|---|---|---|
| length | d, i | u, o, x, X | f, F, e, E, g, G, a, A | c | s | p | n |
| (none) | int |
unsigned int |
double |
int |
char* |
void* |
int* |
| hh | signed char |
unsigned char |
signed char* |
||||
| h | short int |
unsigned short int |
short int* |
||||
| l | long int |
unsigned long int |
wint_t |
wchar_t* |
long int* |
||
| ll | long long int |
unsinged long long int |
long long int* |
||||
| L | long double |
scanf()
scanf() 的目的在於從標準輸入裝置(通常為鍵盤)輸入資料。
此函式用法與 printf() 類似,範例如下。
#include <stdio.h>
int main()
{
int integer;
char character;
scanf("%d", &integer);
scanf("%c", &character);
return 0;
}