兩種常見情境:
"12345",需保留前導零或超長整數,存入 char str[]。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("%d", &n) 讀完整數後,緩衝區殘留 \n。緊接著 gets(str) 或 scanf("%c", &c) 會直接讀到換行符導致「跳過輸入」。
解法:
scanf("%d", &n) 讀數字,scanf("%s", str) 讀字串(自動跳過空白)。getchar() 吃掉換行,或用 scanf(" %c", &c)(前面加空格跳過空白)。