首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言數字字串輸入處理:scanf、gets 與字元陣列的正確姿勢

     編輯:C 語言問答

「數字字串」到底是什麼?

兩種常見情境:

  1. 純數字字串:如 "12345",需保留前導零或超長整數,存入 char str[]。
  2. 多個整數輸入:如輸入 10 20 30 存入 int arr[]。

情境一:讀取一行純數字字串

char num_str[20];
printf("請輸入數字字串: ");
scanf("%19s", num_str); // %s 遇空白/換行停止,安全長度限制
printf("你輸入: %s\n", num_str);

注意:%s 不會讀取空格,若輸入 12 34 只會讀到 12。

情境二:讀取包含空格的數字串(罕見)

char line[100];
fgets(line, sizeof(line), stdin); // 讀整行含空格
line[strcspn(line, "\n")] = 0;    // 移除換行符

情境三:輸入多個整數存入陣列

int nums[8];
printf("請輸入 8 個整數: ");
for (int i = 0; i < 8; i++) {
    if (scanf("%d", &nums[i]) != 1) {
        printf("輸入格式錯誤\n");
        break;
    }
}

常見坑:scanf 留下的換行符

scanf("%d", &n) 讀完整數後,緩衝區殘留 \n。緊接著 gets(str) 或 scanf("%c", &c) 會直接讀到換行符導致「跳過輸入」。

解法:

  • 統一用 scanf("%d", &n) 讀數字,scanf("%s", str) 讀字串(自動跳過空白)。
  • 混用時,在讀字元/字串前加 getchar() 吃掉換行,或用 scanf(" %c", &c)(前面加空格跳過空白)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved