[英]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
數組,該數組在發布的代碼中使用不正確。
以下是原始代碼的更正版本:
#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.