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

C++ 從兩列文本文件按列讀取數據到兩個一維數組完整示例

     編輯:程式設計疑難解答

數據格式

0.00 882.197
8.35 877.375
15.66 871.794
...
372.71 893.685

核心代碼

#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;

int main() {
    const int MAX = 1000;
    float arr1[MAX], arr2[MAX];
    int i = 0;

    ifstream fin("F:\\test.txt");
    if (!fin) {
        cerr << "Unable to open file";
        return 1;
    }

    char line[256];
    while (fin.getline(line, sizeof(line))) {
        if (sscanf(line, "%f %f", &arr1[i], &arr2[i]) == 2) {
            i++;
            if (i >= MAX) break;
        }
    }
    fin.close();

    for (int j = 0; j < i; j++) {
        cout << arr1[j] << " " << arr2[j] << endl;
    }
    return 0;
}

關鍵點講解

  • ifstream + getline:按行讀取,避免流提取器遇到空白/換行的不確定行為;
  • sscanf 解析:格式字符串 "%f %f" 自動跳過任意空白,健壯性強;
  • 返回值判斷:== 2 確保兩列均成功讀取,跳過空行/異常行;
  • 邊界保護:MAX 防止數組越界,生產環境建議用 vector<float> 動態擴容。

現代化 C++ 寫法 (C++11+)

#include <fstream>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>

int main() {
    vector<float> col1, col2;
    ifstream fin("F:\\test.txt");
    string line;
    while (getline(fin, line)) {
        if (line.empty()) continue;
        istringstream iss(line);
        float v1, v2;
        if (iss >> v1 >> v2) {
            col1.push_back(v1);
            col2.push_back(v2);
        }
    }
    for (size_t i = 0; i < col1.size(); ++i)
        cout << col1[i] << " " << col2[i] << '\n';
}

總結

「按行讀取 + 字符串流解析」是處理列對齊文本文件的標準模式,兼顧健壯性與可讀性。優先使用 vector 替代定長數組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved