標籤:style blog color 使用 io 檔案 資料 div
scanf 函數稱為格式輸入函數,即把使用者鍵盤輸入的內容儲存到指定的變數中。
scanf 函數簽名
scanf("格式控制字元串", 變數地址清單)
scanf 函數是一個標準庫函數,函數原型位於 <stdio.h> 中。與 printf 函數相同,C語言允許隱式使用 scanf 函數,即可以不提前包含 <stido.h> 標頭檔。如果隱式使用 scanf 或 printf 函數,編譯時間系統會發出隱式調用警告。
scanf 不能在控制台回顯非格式化預留位置字串,也就是說不能在控制台顯示輸入提示。
scanf 第一個參數 “格式控制字元串” 可以分為兩部分,一部分為格式預留位置,另一部分為變數分隔字元。
格式預留位置
%[*][輸入資料寬度][長度]類型
scanf 支援輸入的類型如下:
1. d - 十進位整數
2. o - 八進位整數
3. x - 十六進位整數
4. u - 無符號十進位整數
5. f 或 e - 小數形式或指數形式的實型數
6. c - 單個字元
7. s - 字串
變數分隔字元
變數分隔字元是指在輸入多個變數資料時用於分隔輸入資料的非格式預留位置。例如:
scanf("%dA%d", &a, &b)在控制台輸入:
123A456結果為:a = 123, b = 456
其中 scanf 第一個參數中的 A 就是一個變數分隔字元。如果 scanf 第一個參數中沒有指明變數分隔字元,那麼系統預設空格符、Tab符或斷行符號符作為分隔字元,C編譯器在遇到這三個字元或者非法字元時,就認為輸入的資料結束。例如:
scanf("%d%d", &a, &b);在控制台輸入:123 456或者123456結果都是:a = 123, b = 456
scanf 函數執行個體1. 一般用法
int main(void) { int a, b; printf("Input a, b\n"); scanf("%d%d", &a, &b); printf("a=%d, b=%d\n", a, b); return 0; }
輸入與輸出:
$ ./a.out Input a, b123 456a=123, b=456
2. 使用 * 符號表示跳過該輸入值
將上例代碼修改為:
scanf("%d%*d%d", &a, &b)
輸入與輸出:跳過第二個輸入值 456, 將第三個輸入值 789 賦給了變數 b。
$ ./a.out Input a, b123 456 789a=123, b=789
3. 格式預留位置中限定資料寬度
將上例代碼修改為:
scanf("%4d%4d", &a, &b);
輸入與輸出:
$ ./a.out Input a, b12345 56789a=1234, b=5$ ./a.out Input a, b123456789a=1234, b=5678
第一次輸入時,C程式直接截取了 12345 的前四位賦給了變數 a,然後從剩餘的 5 56789 中準備再截取四位賦給變數 b,但在第二個位置遇到了空格符,之前說過C程式是預設空格符為資料分隔字元,因此C程式認為該變數資料輸入結束,將 5 賦給了b。