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;
}
//讀者可以自行測試
留言
avatar-img
電資鼠 - 您的學習好夥伴
21會員
242內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/07
本章節將探討左下三角稀疏矩陣。
Thumbnail
2025/03/07
本章節將探討左下三角稀疏矩陣。
Thumbnail
2025/03/07
相信讀者現在對於鏈結串列有了更多的認識,所以我再進一步,示範更多關於鏈結串列的操作,這部分示範會將程式模組化。將鏈結串列的操作寫進一個標頭檔,並在主程式中引入。
Thumbnail
2025/03/07
相信讀者現在對於鏈結串列有了更多的認識,所以我再進一步,示範更多關於鏈結串列的操作,這部分示範會將程式模組化。將鏈結串列的操作寫進一個標頭檔,並在主程式中引入。
Thumbnail
2025/03/07
本章節示範透過「陣列索引」和「指標運算」兩種方式來存取同一個二維陣列 a,並印出相同的數值以及對應的位址,以說明它們其實指向的是同一塊連續的記憶體空間。本文將依序解釋各段程式碼,並示範可能的執行結果與背後原理。
Thumbnail
2025/03/07
本章節示範透過「陣列索引」和「指標運算」兩種方式來存取同一個二維陣列 a,並印出相同的數值以及對應的位址,以說明它們其實指向的是同一塊連續的記憶體空間。本文將依序解釋各段程式碼,並示範可能的執行結果與背後原理。
Thumbnail
看更多
你可能也想看
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
在 Python 中,print( ) 函數用於將結果輸出到螢幕上。當你嘗試將不同資料型別(例如字串和數字)混合在一起輸出時,print( )函數無法直接處理這些不同型別的資料,因此你需要先將它們轉換為相同的資料型別。通常,這意味著需要將數字轉換為字串型別,以便與其他字串一同輸出。 雖然我們也可以
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
如果你也是從事軟體相關工作的人,一定會遭遇突然需要你去學習一套你不熟悉的程式語言狀況吧,此時你會怎麼做呢? 是趕快去買書來看嗎? 還是趕快找一門程式課來上? 又或者乾脆去找會的同事來教學?
Thumbnail
User Input & Tables 的使用
Thumbnail
User Input & Tables 的使用
Thumbnail
註解 & Print & 變數型態
Thumbnail
註解 & Print & 變數型態
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
Thumbnail
關於程式語言的學習,只要掌握住幾個基本特性要熟悉幾種程式語言也不困難,這三個基本特性就是…
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News