簡體   English   中英

從文件故障中獲取輸入C ++

[英]Getting input from file troubles C++

我一直在嘗試用C ++中的.txt文件讀取一些信息,但並不像我期望的那樣工作。 這是一些示例代碼:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    char words[255];
    int value = 0;

    ifstream input_stream("test.txt");

    input_stream >> value;
    input_stream.getline(words, 256);

    cout << value << endl;
    cout << words << endl;
}

test.txt包含:

1234
WordOne WordTwo

我期望代碼打印文本文件中包含的兩行,但我只是得到:

 1234

我一直在閱讀有關getline和istream的內容,但似乎無法找到任何解決方案,所以任何幫助都會受到贊賞。

謝謝

讀取整數后,換行符仍保留在輸入流中:

// Always check result to ensure variables correctly assigned a value.
if (input_stream >> value)
{
}

然后,對getline()的調用將讀取換行符並停止,從而生成一個空字符串。 要更正,請在調用getline()之前使用換行符(選項包括使用getline()ignore() )。

請注意,有一個版本std::getline()接受std::string作為其參數,以避免使用固定大小的char數組,該數組在發布的代碼中使用不正確。

ifstream的getline方法收集輸入,直到命中兩個選項之一。 到達終止字符或傳入的大小。 在您的情況下,在達到大小之前遇到換行符終止符。

使用另一個getline檢索第二行文本。

參考

以下是原始代碼的更正版本:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    char words[256];                  // was 255
    int value = 0;

    ifstream input_stream("test.txt");

    input_stream >> value;
    input_stream.ignore();            // skip '\n'
    input_stream.getline(words, 256);

    cout << value << endl;
    cout << words << endl;
}

另外,我建議你使用string而不是char[]並使用其他getline函數

您看到的問題是,輸入input_stream>>(int)之后, 1234之后的第一個換行符沒有被消耗掉; 所以下一個getline只讀到該文件的末尾。

這是一個非常構建的場景,通常在學校作業中找到。 讀取文本文件時更常見的情況是將整個文件視為基於行的文本。

在這種情況下更方便

string line;
while( std::getline( input_stream, line ) ){

}

是合適的,並且方式不易出錯。

文本文件通常具有預定義的格式。 也許是name = value行,並從文件中讀取行進行解析。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM