C語言自學攻略-scanf()進階用法解析

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

在C語言中,scanf()可能並沒有我們所想的那麼簡單且單調,下面我就列出4點補充的使用方式。

  1. 只讀取數字並判斷範圍(下面以 0-8 為例):
#include <stdio.h>
int main() {
char digits[20]; // 宣告字元陣列,用來存放一連串的字元。

printf("請輸入一串數字: ");
scanf("%[0-8]", digits); // 只讀取數字 0-8,直到遇到9或非數字
printf("您輸入的數字是: %s\n", digits);

return 0;
}
/* 輸出
請輸入一串數字: 123456789
您輸入的數字是: 12345678

請輸入一串數字: 12345abc678
您輸入的數字是: 12345
*/

解釋

  • 由於 scanf("%[0-8]", digits); 只會讀取 0-8 的數字,所以當遇到 9 或 a 字母時,scanf 會停止讀取(也就是不會讀取)。

  1. 讀取 A-Z, a-z, 0-9(字母和數字):
#include <stdio.h>
int main() {
char alnum[50];

printf("請輸入字母和數字的組合: ");
scanf("%[A-Za-z0-9]", alnum); // 只讀取大小寫字母和數字
printf("您輸入的字母和數字是: %s\n", alnum);

return 0;
}
/* 輸出
請輸入字母和數字的組合: Ab3#Bc4
您輸入的字母和數字是: Ab3
*/

解釋

  • scanf("%[A-Za-z0-9]", alnum); 讀取遇到非A-Z、a-z、0-9的字符時,scanf 會停止讀取(也就是不會讀取)。

  1. 讀取某些字元以外的所有字元(本例子為讀取 ABC 字元以外的所有字元):
#include <stdio.h>
int main() {
char digits[20];

printf("請輸入一串數字: ");
scanf("%[^ABC]", digits); // 格式長這樣,添加一個 "^"
printf("您輸入的數字是: %s\n", digits);

return 0;
}
/* 輸出
請輸入一串數字: #1@aB
您輸入的數字是: #1@a
*/

解釋

  • scanf("%[^ABC]", digits); 表示只讀取ABC以外的所有字元,直到遇到ABC其中一個,scanf 會停止讀取(也就是不會讀取)。

  1. 預防scanf收到的字元超出字串範圍。

預防的方法之一是,限定 scanf 每次執行可以接受的最大字元數,例如:

#include <stdio.h>

int main() {
char test[10];

printf("請輸入字串:");
scanf("%9s",test);
printf("輸入的字串:%s\n",test);

return 0;
}

在上面的例子中,"%9s"的意思是: 就算輸入的字元數超過 9,buf 也只會收到 9 個字元,超過的字元會留在輸入緩衝區內。而這邊要注意一個非常重要的觀念,就是 scanf()自動在最後加上 '\0',使其成為正確的 C 語言字串(以後的章節還會提到)


  • 輸入緩衝區會在下一個單元提到。

而另一個預防輸入超過 test 長度的方式,是使用 fgets (一樣下一章會提到)。

在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































本章將介紹 C 語言的輸入與輸出 ,透過本章系統性的學習與使用示範,你將能夠靈活掌握 C 語言的資料讀取與輸出技巧。
本章將介紹 C 語言中的變數與常數,這是學習 C 語言的基礎概念,決定了 數據儲存、運算與管理方式。我們將學習如何 宣告變數與常數,並透過一個 實際範例 來開始撰寫C語言。
本章將介紹 C 語言的輸入與輸出 ,透過本章系統性的學習與使用示範,你將能夠靈活掌握 C 語言的資料讀取與輸出技巧。
本章將介紹 C 語言中的變數與常數,這是學習 C 語言的基礎概念,決定了 數據儲存、運算與管理方式。我們將學習如何 宣告變數與常數,並透過一個 實際範例 來開始撰寫C語言。
你可能也想看
Google News 追蹤
Thumbnail
C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。 基本用法 首先要導入 C 語言的標準函式庫: #include <cstdlib> 以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式
Thumbnail
C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。 基本用法 首先要導入 C 語言的標準函式庫: #include <cstdlib> 以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式