本文解決一個經典的C語言輸入處理問題:從標準輸入讀取一串逗號分隔的整數(每個<10000,共<100個),移除所有包含數字7或能被7整除的數字,其餘按原序輸出。
輸入:1,7,56,77,87,2,45,42,97,9977
輸出:1,2,45
\n 判斷結束(整型陣列存不進字符)#include <stdio.h>
#include <string.h>
void main() {
char input[1000000]; // 足夠大的緩衝區
int numbers[100], filtered[100];
int i, j, k, len, current_num, flag = 0, count = 0;
gets(input); // 讀取整行(含逗號)
len = strlen(input);
// 解析字符串,提取整數存入 numbers 陣列
for (i = 0, j = 0; i <= len; i++) {
if (input[i] >= '0' && input[i] <= '9') {
current_num = current_num * 10 + (input[i] - '0');
flag = 1;
} else if (flag == 0) {
continue; // 跳過非數字且非數字開始前的字符
} else {
numbers[j++] = current_num;
count++;
current_num = 0;
flag = 0;
}
}
// 篩選:既不含7也非7的倍數
for (i = 0, j = 0; i < count; i++) {
int n = numbers[i];
if (n % 7 == 0) continue;
if (n % 10 == 7) continue;
if ((n / 10) % 10 == 7) continue;
if ((n / 100) % 10 == 7) continue;
if ((n / 1000) % 10 == 7) continue;
filtered[j++] = n;
}
// 輸出結果(逗號分隔,末尾無逗號)
for (i = 0; i < j - 1; i++) {
printf("%d,", filtered[i]);
}
if (j > 0) printf("%d\n", filtered[j - 1]);
}
current_num = current_num*10 + (ch-'0'),遇分隔符則存入陣列fgets() 替代不安全的 gets()contains_7(int n) 函數這道題鍛鍊了字符串處理、數字解析與位運算邏輯,是C語言基礎功的優秀練習。