資料的輸入與輸出

在 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

中括號中的 flagswidthprecisionlength 表示可以省略。

specifier 輸出
d, i 有號整數
u 無號整數
o 無號八進位數
x, X 無號十六進位數(小寫/大寫)
f, F 浮點數(小寫/大寫)
e, E 科學表示法(小寫/大寫)
g, G 最短表示法(小寫/大寫)
a, A 十六進位浮點數(小寫/大寫)
c 字元
s 字串
p 記憶體位址
n 沒有輸出,其參數必須為有號整數
% %
flags 敘述
- 向左對齊
+ 在數字輸出中顯示 + 或 - 號
(空白鍵) 正數會起始於空白字元
# 對於八進位輸出(o),會在前方加入 0
對於十六進位輸出,會在前方加入 0x0X
對於浮點數輸出(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;
}

results matching ""

    No results matching ""