C/C++

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 只有接收字元而已。

留下一個回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *