Zi 字媒體
2017-07-25T20:27:27+00:00
一把梭系列 ~ 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.文中提及的『正則(正規)表達式』在實務操作上經常使用,有興趣的人可以在本部落格找到其他資訊
寫了
5860316篇文章,獲得
23313次喜歡