如何用 C++ 從檔案中讀取整數

Jinku Hu 2023年1月30日 2020年11月7日
  1. 在 C++ 中使用 while 迴圈和 >> 操作符從檔案中讀取 Int
  2. 使用 while 迴圈和 >> 運算子結合 push_back 方法從檔案中讀取 Int 值
  3. 不要使用 while 迴圈和 eof() 方法從檔案中讀取 Int
如何用 C++ 從檔案中讀取整數

本文將解釋幾種 C++ 方法,如何從檔案中讀取 int 資料。

在下面的示例程式中,我們假設一個文字檔案命名為 input.txt,其中包含多行以空格分隔的整數。需要注意的是,每個示例程式碼都會檢查這個檔名是否與實際的檔案流相關聯,並在出錯時列印相應的失敗資訊。

  • input.txt 的內容:
123 178 1289 39
90 89 267 909 23
154 377 34 974 322

在 C++ 中使用 while 迴圈和 >> 操作符從檔案中讀取 Int

這個方法使用 while 迴圈進行迭代處理,直到到達 EOF(檔案末尾),並將每個整數儲存在數字變數中。然後,我們可以在迴圈體中把每個數字列印到控制檯。

#include <iostream>
#include <fstream>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream;

int main()
{
    string filename("input.txt");
    int number;

    ifstream input_file(filename);
    if (!input_file.is_open()) {
        cerr << "Could not open the file - '"
             << filename << "'" << endl;
        return EXIT_FAILURE;
    }

    while (input_file >> number) {
        cout << number << "; ";
    }
    cout << endl;
    input_file.close();

    return EXIT_SUCCESS;
}

輸出:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;

使用 while 迴圈和 >> 運算子結合 push_back 方法從檔案中讀取 Int 值

作為另一種選擇,我們可以從檔案中獲取每個整數,像前面的例子一樣將其儲存在數字變數中,然後在每次迭代時將它們推到 int 向量中。請注意,這個方案包括另一個 for 迴圈,以模仿更實際的系統,在這個系統中,需要對儲存的向量編號的元素進行操作。

#include <iostream>
#include <fstream>
#include <vector>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream; using std::vector;

int main()
{
    string filename("input.txt");
    vector<int> numbers;
    int number;

    ifstream input_file(filename);
    if (!input_file.is_open()) {
        cerr << "Could not open the file - '"
             << filename << "'" << endl;
        return EXIT_FAILURE;
    }

    while (input_file >> number) {
        numbers.push_back(number);
    }

    for (const auto &i : numbers) {
        cout << i << "; ";
    }
    cout << endl;
    input_file.close();

    return EXIT_SUCCESS;
}

輸出:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;

不要使用 while 迴圈和 eof() 方法從檔案中讀取 Int

可以考慮使用 eof() 成員函式作為 while 迴圈條件來解決同樣的問題。遺憾的是,這可能會導致一次額外的迭代。由於函式 eof() 只有在 eofbit 被設定時才返回 true,所以可能會導致未初始化的迭代被修改。下面的程式碼示例演示了這種情況。

#include <iostream>
#include <fstream>
#include <vector>

using std::cout; using std::cerr;
using std::endl; using std::string;
using std::ifstream; using std::vector;

int main()
{
    string filename("input.txt");
    vector<int> numbers;

    ifstream input_file(filename);
    if (!input_file.is_open()) {
        cerr << "Could not open the file - '"
             << filename << "'" << endl;
        return EXIT_FAILURE;
    }

    while (!input_file.eof()) {
        int tmp;
        input_file >> tmp;
        numbers.push_back(tmp);
    }

    for (const auto &i : numbers) {
        cout << i << "; ";
    }
    cout << endl;
    input_file.close();

    return EXIT_SUCCESS;
}

輸出:

123; 178; 1289; 39; 90; 89; 267; 909; 23; 154; 377; 34; 974; 322;
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C++ File