上一章節中,我們了解了使用 printf()
印出數值,而輸入scanf()
的語法其實和輸出有異曲同工之妙。
一樣,不用死記硬背,基本的熟悉就好,大不了就回來查。
#include <stdio.h>
int main() {
// 各種資料型別的變數
int a;
unsigned int b;
long int c;
long long int d;
unsigned long long int e;
short f;
unsigned short g;
float h;
double i;
long double j;
char k;
char str[100]; // 字元陣列(存放100個字元型態的空間)
int octal;
int hexadecimal;
// 輸入部分
printf("請依序輸入以下數據:\n");
printf("1. int: ");
scanf("%d", &a);
printf("2. unsigned int: ");
scanf("%u", &b);
printf("3. long int: ");
scanf("%ld", &c);
printf("4. long long int: ");
scanf("%lld", &d);
printf("5. unsigned long long int: ");
scanf("%llu", &e);
printf("6. short: ");
scanf("%hd", &f);
printf("7. unsigned short: ");
scanf("%hu", &g);
printf("8. float: ");
scanf("%f", &h);
printf("9. double: ");
scanf("%lf", &i);
printf("10. long double: ");
scanf("%Lf", &j);
printf("11. char: ");
scanf(" %c", &k); // 注意: 字元前加空格是為了避免不小心讀取到上次輸入的換行
printf("12. string: ");
scanf("%s", str);
printf("13. 8進制整數: ");
scanf("%o", &octal);
printf("14. 16進制整數: ");
scanf("%x", &hexadecimal);
// 輸出部分
printf("\n您輸入的數據如下:\n");
printf("1. int: %d\n", a);
printf("2. unsigned int: %u\n", b);
printf("3. long int: %ld\n", c);
printf("4. long long int: %lld\n", d);
printf("5. unsigned long long int: %llu\n", e);
printf("6. short: %hd\n", f);
printf("7. unsigned short: %hu\n", g);
printf("8. float: %f\n", h);
printf("9. double: %f\n", i);
printf("10. long double: %Lf\n", j);
printf("11. char: %c\n", k);
printf("12. string: %s\n", str);
printf("13. 8進制數: %o等於十進制的:%d\n", octal,octal);
printf("14. 16進制數: %x等於十進制的:%d\n", hexadecimal,hexadecimal);
return 0;
}
&
呢?&
,表示取得 a 變數的記憶體位址。str
這個變數。str
是一個 字元陣列,在 C 語言中,陣列變數的名稱本身就是一個指向陣列起始位址的指標。scanf("%s", str);
需要知道 str
在記憶體中的位置時:str
本身就是位址,所以不需要 &
。程式碼可以直接運行,請讀者自行測試看看。
#include <stdio.h>
int main() {
// 各種資料型別的變數
float sci_num1;
double sci_num2;
// 輸入部分
printf("請輸入以下數據:\n");
printf("1. 輸入測試數值 (float, 例如: 3.14e2、3.14、314): ");
scanf("%e", &sci_num1);
printf("2. 輸入測試數值 (double, 例如: 2.71828E-3、0.271、271): ");
scanf("%le", &sci_num2);
// 輸出部分
printf("\n您輸入的科學記號數據如下:\n");
printf("1. 科學記號 (float, %%e 格式): %e\n", sci_num1);
printf("1. 科學記號 (float, %%E 格式): %E\n", sci_num1);
printf("2. 科學記號 (double, %%e 格式): %e\n", sci_num2);
printf("2. 科學記號 (double, %%E 格式): %E\n", sci_num2);
return 0;
}
//讀者可以自行測試
在 C 語言中,printf()
提供了多種格式控制符,可以控制輸出數據的 對齊、寬度、小數精度 等,這對於數值運算、表格輸出、報表等應用非常重要。
整理的使用範例如下:
#include <stdio.h>
int main() {
// 輸出整數 7,沒有指定格式(直接輸出數值)
printf("%d\n", 7); // 輸出: 7
// 輸出整數 7,右對齊,占 3 個欄位寬度(不足部分填空格)
printf("%3d\n", 7); // 輸出: 7 (前面補兩個空格)
// 輸出整數 7,右對齊,占 3 個欄位寬度(不足部分填 0)
printf("%03d\n", 7); // 輸出: 007 (前面補兩個 0)
// 輸出浮點數 1.2345,保留小數點後 2 位(四捨五入)
printf("%.2f\n", 1.2345); // 輸出: 1.23
// 輸出浮點數 1.2345,保留小數點後 2 位,占 5 個欄位寬度(右對齊,不足部分補空格)
printf("%5.2f\n", 1.2345); // 輸出: 1.23 (前面補空格)
// 輸出浮點數 1.2345,保留小數點後 2 位,占 5 個欄位寬度(不足部分補 0)
printf("%05.2f\n", 1.2345); // 輸出: 01.23 (前面補一個 0)
// 輸出整數 7,左對齊,占 3 個欄位寬度(不足部分補空格)
printf("%-3d\n", 7); // 輸出: 7 (後面補兩個空格)
// 輸出浮點數 1.2345,保留小數點後 2 位,左對齊,占 5 個欄位寬度(不足部分補空格)
printf("%-5.2f\n", 1.2345); // 輸出: 1.23 (後面補空格)
return 0;
}
//讀者可以自行測試