資料的輸入與輸出
在 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;
}