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

C 語言一次性輸入多組數據並輸出:二維數組與流控制技巧

     編輯:程式設計綜合問答

需求分析

輸入:
3 2
1 3
2 4

輸出:
3 2
1 3
2 4

即**原樣回顯多行數據**,核心是「一次性讀取所有輸入,再一次性輸出」。

方案一:逐行讀取存入二維字符數組 (最接近題目「二維字符數組」提示)

#include 
#define MAX_LINES 100
#define MAX_LEN 1024

int main() {
    char lines[MAX_LINES][MAX_LEN];
    int n = 0;
    
    // 逐行讀取,保留換行符
    while (n < MAX_LINES && fgets(lines[n], MAX_LEN, stdin)) {
        // 移除 fgets 保留的換行符 (可選)
        // lines[n][strcspn(lines[n], "\n")] = '\0';
        n++;
    }
    
    // 一次性輸出
    for (int i = 0; i < n; i++) {
        fputs(lines[i], stdout); // 自帶換行
    }
    return 0;
}

方案二:動態內存 + 靈活行數 (生產級健壯寫法)

#include 
#include 
#include 

int main() {
    char **lines = NULL;
    size_t capacity = 0, count = 0;
    char *line = NULL;
    size_t len = 0;
    ssize_t read;

    while ((read = getline(&line, &len, stdin)) != -1) {
        if (count >= capacity) {
            capacity = capacity ? capacity * 2 : 16;
            lines = realloc(lines, capacity * sizeof(char*));
        }
        lines[count] = malloc(read + 1);
        memcpy(lines[count], line, read);
        lines[count][read] = '\0';
        count++;
    }
    free(line);

    for (size_t i = 0; i < count; i++) {
        printf("%s", lines[i]);
        free(lines[i]);
    }
    free(lines);
    return 0;
}

方案三:不存儲,流式直通 (內存最省,但不符合「一次性輸出」字面要求)

int c;
while ((c = getchar()) != EOF) putchar(c);

關鍵點總結

  • `fgets`/`getline` 保留換行符:直接 `fputs`/`printf("%s")` 即可原樣輸出,無需手動拼接 `\n`。
  • 緩衝區大小:`MAX_LEN` 需覆蓋最長預期行長,防止截斷。
  • 輸入結束判斷:控制台輸入 `Ctrl+D` (Linux/Mac) 或 `Ctrl+Z` (Windows) 發送 EOF。
  • 題目隱含條件:若輸入行數固定 (如首行給出 N),可用 `for (int i=0; i

進階:格式化數據而非原文回顯

若需解析數字再按格式輸出:

int a, b;
while (scanf("%d %d", &a, &b) == 2) {
    printf("%d %d\n", a, b);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved