C語言自學攻略-輸入與輸出

更新於 發佈於 閱讀時間約 9 分鐘

上一章節中,我們了解了使用 printf() 印出數值,而輸入scanf()的語法其實和輸出有異曲同工之妙。

輸入與輸出格式表

raw-image

一樣,不用死記硬背,基本的熟悉就好,大不了就回來查。

使用範例:

#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 是一個變數名,我們要將數值寫入到這個變數裡,需要加入& ,表示取得 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;
}
//讀者可以自行測試
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































本章將介紹 C 語言中的變數與常數,這是學習 C 語言的基礎概念,決定了 數據儲存、運算與管理方式。我們將學習如何 宣告變數與常數,並透過一個 實際範例 來開始撰寫C語言。
本章將介紹 C 語言中的變數與常數,這是學習 C 語言的基礎概念,決定了 數據儲存、運算與管理方式。我們將學習如何 宣告變數與常數,並透過一個 實際範例 來開始撰寫C語言。
你可能也想看
Google News 追蹤
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
在學習大語言模型的技術細節時, 弄清楚「輸入文本 Input Text」與「符元化文本 Tokenized Text」之間的差異會很方便[1]。 舉個具體的例子: 輸入文本:Hello, 你好. Obsidian is great! 符元化文本:['Hello', ',',
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
在學習大語言模型的技術細節時, 弄清楚「輸入文本 Input Text」與「符元化文本 Tokenized Text」之間的差異會很方便[1]。 舉個具體的例子: 輸入文本:Hello, 你好. Obsidian is great! 符元化文本:['Hello', ',',
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
介紹C++ 語法 資料型態,架構說明 程式語言為人類與電腦溝通的工具 程式設計流程: 定義問題 -> 問題分析 -> 撰寫演算法 ->程式撰寫 -> 程式執行及維護