search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

一把梭系列 ~ C語言範例 (0006) [printf 與 scanf 分析說明] – jashliao部落格

一把梭系列 ~ C語言範例 (0006) [printf 與 scanf 分析說明]


資料來源: https://openhome.cc/Gossip/CGossip/PrintfScanf.html

https://www.cplusplus.com/reference/cstdio/fflush/


★前言


★主題:

    00.C語言 主控台(console mode) 標準輸出函數庫
        學習 C 的過程中,通常是從主控台,也就是文字模式下開始,為了與程式互動,在主控台下輸出程式執行結果,或是從主控台取得使用者的輸入資料是基本需求,在 C 中標準輸入輸出是由 stdio.h 提供,這也就是為何要在程式的一開頭總是加上:
        #include
        


    01.C語言 主控台(console mode) 標準輸出函數 ~ printf

    printf 時要指定整數、浮點數、字元等進行顯示控制時,要配合格式指定字(format specifier)才可達到,以下列出幾個可用的格式指定碼:

        \t:產生Tab空格
        \n:產生換行
        %c:以字元方式輸出
        %d:10 進位(進制)整數輸出
        %o:以 8 進位(進制)整數方式輸出
        %x、%X:將整數以 16 進位(進制)方式輸出
        %u:無號整數輸出
        %f:浮點數輸出
        %±m.nf:浮點數輸出,m整數位數;n小數位數;± 靠左/靠右對其方向
        %*:預留N個字元寬度 (數值和對字串類型 可以更長)
        %.*:限制N個字元寬度 (對字串類型 不可更長)
        %e、%E:使用科學記號顯示浮點數
        %g、%G:浮點數輸出,取 %f 或 %e(%f 或 %E),看哪個表示精簡
        %%:顯示 %
        %s:字串輸出
        %lu:long unsigned 型態的整數
        %p:指標型態


    02.C語言 主控台(console mode) 標準輸入函數 ~ scanf

    scanf 時要指定整數、浮點數、字元等進行輸入控制,要配合格式指定字(format specifier)才可達到,以下列出幾個可用的格式指定碼:
        %c:以字元方式輸入
        %d:整數輸入
        %f:浮點數輸入
        %g:浮點數輸入
        %s:字串輸入
        %d %d:兩個數字,中間使用空白區隔
        %d-%d:兩個數字,中間使用-號區隔
        %ns:若輸入的字元超過 n,buf 也只會收到 n 個字元加上一個空字元,超過的字元會留在輸入緩衝區。
        支援正則(正規)表達式
            %[1-5]:限制輸入1 到 5 的字元

            %[XYZ]:限制輸入輸入 XYZ 任其中的字元

        

★code

#include 
#include 

int main()
{
    /*
    printf 時要指定整數、浮點數、字元等進行顯示,要配合格式指定字(format specifier),以下列出幾個可用的格式指定碼:

    %c:以字元方式輸出
    %d:10 進位(進制)整數輸出
    %o:以 8 進位(進制)整數方式輸出
    %x、%X:將整數以 16 進位(進制)方式輸出
    %u:無號整數輸出
    %f:浮點數輸出
    %±m.nf:浮點數輸出,m整數位數;n小數位數;± 靠左/靠右對其方向
    %*:預留N個字元寬度 (數值和對字串類型 可以更長)
    %.*:限制N個字元寬度 (對字串類型 不可更長)
    %e、%E:使用科學記號顯示浮點數
    %g、%G:浮點數輸出,取 %f 或 %e(%f 或 %E),看哪個表示精簡
    %%:顯示 %
    %s:字串輸出
    %lu:long unsigned 型態的整數
    %p:指標型態
    */
    printf("顯示字元 %c\n", 'A');
    printf("顯示字元編碼 %d\n", 'A');
    printf("顯示字元編碼 %c\n", 65);
    printf("顯示十進位整數 %d\n", 15);
    printf("顯示八進位整數 %o\n", 15);
    printf("顯示十六進位整數 %X\n", 15);
    printf("顯示十六進位整數 %x\n", 15);
    printf("顯示科學記號 %E\n", 0.001234);
    printf("顯示科學記號 %e\n", 0.001234);

    printf("-----------\n");
    printf("example:%.2f\n", 19.234);
    printf("example:%6.2f\n", 19.234);
    printf("example:%-6.2f\n", 19.234);

    printf("-----------\n");
    printf("%*d\n", 1, 19);
    printf("%*d\n", 2, 19);
    printf("%*d\n", 3, 19);
    printf("%*d\n", 2, 190);

    printf("-----------\n");
    printf("%.*d\n", 1, 20);
    printf("%.*d\n", 2, 20);
    printf("%.*d\n", 3, 20);
    printf("%.*d\n", 2, 200);

    printf("-----------\n");
    printf("%.*s\n", 4, "JashLiao");
    printf("%.*s\n", 7, "JashLiao");
    printf("%.*s\n", 8, "JashLiao");

    printf("-----------\n");
    printf("%*s\n", 4, "JashLiao");
    printf("%*s\n", 7, "JashLiao");
    printf("%*s\n", 8, "JashLiao");

    /*
    scanf 時要指定整數、浮點數、字元等進行顯示,要配合格式指定字(format specifier),以下列出幾個可用的格式指定碼:
    %c:以字元方式輸入
    %d:整數輸入
    %f:浮點數輸入
    %g:浮點數輸入
    %s:字串輸入
    %d %d:兩個數字,中間使用空白區隔
    %d-%d:兩個數字,中間使用-號區隔
    %ns:若輸入的字元超過 n,buf 也只會收到 n 個字元加上一個空字元,超過的字元會留在輸入緩衝區。
    支援正則(正規)表達式
        %[1-5]:限制輸入1 到 5 的字元
        %[XYZ]:限制輸入輸入 XYZ 任其中的字元
    */
    printf("-----------\n");
    int intbuf;
    printf("請輸入數字:");
    scanf("%d", &intbuf);//請輸入數字:10
    printf("你輸入的數字:%d\n", intbuf);

    printf("-----------\n");
    int number1, number2;
    printf("請輸入兩個數字,中間使用空白區隔):");
    scanf("%d %d", &number1, &number2);//請輸入兩個數字,中間使用空白區隔):10 20
    printf("你輸入的數字:%d %d\n", number1, number2);
    printf("請再輸入兩個數字,中間使用-號區隔):");//請再輸入兩個數字,中間使用-號區隔):30-40
    scanf("%d-%d", &number1, &number2);
    printf("你輸入的數字:%d-%d\n", number1, number2);

    printf("-----------\n");
    fflush(stdin); // 清除輸入緩衝區

    char buf50[50];
    printf("請輸入 1 到 5 的字元:");//請輸入 1 到 5 的字元:1234432155556
    scanf("%[1-5]", buf50);
    printf("輸入的字元為 %s\n", buf50);
    fflush(stdin); // 清除輸入緩衝區
    printf("請輸入 XYZ 任一字元:");//請輸入 XYZ 任一字元:XXXXXXYYZZAAZZZZXXX
    scanf("%[XYZ]", buf50);
    printf("輸入的字元為 %s\n", buf50);

    printf("-----------\n");
    fflush(stdin); // 清除輸入緩衝區
    char buf10[10];
    printf("請輸入字串:");//請輸入字串:1234567890
    scanf("%9s", buf10);
    printf("輸入的字串:%s\n", buf10);

    return 0;
}
/* 執行結果文字備份
顯示字元 A
顯示字元編碼 65
顯示字元編碼 A
顯示十進位整數 15
顯示八進位整數 17
顯示十六進位整數 F
顯示十六進位整數 f
顯示科學記號 1.234000E-003
顯示科學記號 1.234000e-003
-----------
example:19.23
example: 19.23
example:19.23
-----------
19
19
 19
190
-----------
20
20
020
200
-----------
Jash
JashLia
JashLiao
-----------
JashLiao
JashLiao
JashLiao
-----------
請輸入數字:10
你輸入的數字:10
-----------
請輸入兩個數字,中間使用空白區隔):10 20
你輸入的數字:10 20
請再輸入兩個數字,中間使用-號區隔):30-40
你輸入的數字:30-40
-----------
請輸入 1 到 5 的字元:1234432155556
輸入的字元為 123443215555
請輸入 XYZ 任一字元:XXXXXXYYZZAAZZZZXXX
輸入的字元為 XXXXXXYYZZ
-----------
請輸入字串:1234567890
輸入的字串:123456789
*/


★結果:


★延伸說明/重點回顧:

    01.介紹了 C/C++ 中標準輸入/輸出(printf/scanf)的基本『格式指定碼』

    02.使用『fflush(stdin);』可以清除標準輸入緩衝區(input buffer)

    03.文中提及的正則(正規)表達式』在實務操作上經常使用,有興趣的人可以在本部落格找到其他資訊



熱門推薦

本文由 jashliaoeuwordpress 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦