輸入格式如 A1,234 的字串(長度 ≤ 20),以逗號分割為兩部分,分行輸出:
輸入:A1,234 輸出1:A1 輸出2:234
while(c[i]!=','); 後多一個分號 → 空迴圈體,導致死循環或跳過處理。printf('\n'); 使用單引號 → 字符常數提升為 int,%c 格式輸出亂碼,應用雙引號 "\n"。#include <stdio.h>
#include <string.h>
int main() {
char str[100];
fgets(str, sizeof(str), stdin); // 讀取整行,含換行符
// 移除 fgets 讀入的尾隨換行符
str[strcspn(str, "\n")] = '\0';
for (int i = 0; str[i]; i++) {
if (str[i] == ',') {
putchar('\n'); // 直接輸出換行
} else if (str[i] != ' ') { // 可選:跳過空格
putchar(str[i]);
}
}
putchar('\n');
return 0;
}
strtok)#include <stdio.h>
#include <string.h>
int main() {
char str[100], *token, *parts[2] = {NULL, NULL};
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0';
int idx = 0;
token = strtok(str, ",");
while (token != NULL && idx < 2) {
// 去除可能的空格
while (*token == ' ') token++;
char *end = token + strlen(token) - 1;
while (end > token && *end == ' ') *end-- = '\0';
parts[idx++] = token;
token = strtok(NULL, ",");
}
for (int i = 0; i < idx; i++) {
printf("輸出 %d:%s\n", i + 1, parts[i]);
}
return 0;
}
void split_manual(const char *src, char *part1, char *part2) {
int i = 0, j = 0;
// 複製第一部分
while (src[i] && src[i] != ',') {
if (src[i] != ' ') part1[j++] = src[i];
i++;
}
part1[j] = '\0';
// 跳過逗號及空格
while (src[i] && (src[i] == ',' || src[i] == ' ')) i++;
// 複製第二部分
j = 0;
while (src[i]) {
if (src[i] != ' ') part2[j++] = src[i];
i++;
}
part2[j] = '\0';
}
fgets + 去尾隨換行,拒絕 gets/scanf("%s")(遇空格截斷)。strtok、strchr、手動遍歷三種模式。字串分割是 C 語言基本功,多練手寫版,面試、考試、實戰都游刃有餘。