# C語言教學04 - 格式化輸入輸出 ## 撰寫於2018年9月 [現代C語言小心得](https://hackmd.io/s/HJPpJjvw7) ## 格式化字元 格式化字元都是由「%」百分比符號開始。以下列舉常用者,有些現在不曉得是什麼的東西,以後會再闡述。 ### 正負號 |符號|用途| |:-:|--| |\+ |強制顯示正負號| |空格|假如非負號時顯示空格| ### 顯示精度 | 符號|用途 | | :--------: | :-------- | | # | 數字代表顯示的位數,若數字不夠,則以空白補齊 | | 0 | 修飾顯示的位數,若數字不夠,在左側補零對齊| | .# | 小數點後的數字代表double的小數後精度| ### 變數長度修飾 變數長度修飾加在型別前 | 字元 | 解釋 | |:-: |:-----| |hh |修飾int型別,代表signed char或unsigned char| |h |修飾int型別,代表short int或unsigned short int| |l(ell)|修飾所有型別,對於浮點類型無意義,對於int成為long int或unsigned long int| |ll |修飾int型別,代表long long int或unsigned long long int| |L |修飾double,代表long double| |j |修飾int型別,代表intmax_t或uintmax_t型別| |t |修飾int型別,代表ptrdiff_t型別| |z |修飾int型別,代表size_t型別| ### 型別字元 | 字元 | 解釋 | |:-: |:-----| |d | int類別,十進位| |i | int類別,輸入時判斷進位法 | |u | unsigned int,十進位| |o | unsigned int,八進位| |x, X | unsigned int,十六進位| |f | double | |e | double 科學記號 | |c | char 型別用Ascii印出| |s | char陣列(字串) | |p | void指標 | |% | 就是一個百分比符號| ## printf 格式化標準輸出 我們試用一下 ```C= #include <stdio.h> int main() { int a = 10; printf("Hello %+d\n", a); printf("%10d\n", a); printf("%010d\n", a); unsigned long long int b = 20L; printf("Hi %llu\n", b); printf("Aloha %llx\n", b); double c = 3.14; printf("%f\n", c); printf("%e\n", c); printf("%.1f\n", c); printf("%d, %llu, or %f\n", a, b, c); return 0; } ``` 執行結果 ``` Hello +10 10 0000000010 Hi 20 Aloha 14 3.140000 3.140000e+00 3.1 10, 20, or 3.140000 ``` ## scanf 標準格式化輸入 其實差不多,但是有差異 ```C= #include <stdio.h> int main() { int a; scanf("%d", &a); // 要加&,address of operator 取址運算子 printf("Hello%x\n", a); } ``` :::danger **scanf**這裡要加取址運算子&,否則會造成電腦大暴走。原因會在以後闡述。 ::: 假如輸入23 ``` 23[Enter] Hello17 ```