我一直在尝试用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的内容,但似乎无法找到任何解决方案,所以任何帮助都会受到赞赏。
由于
答案 0 :(得分:3)
读取整数后,换行符仍保留在输入流中:
// Always check result to ensure variables correctly assigned a value.
if (input_stream >> value)
{
}
然后,对getline()
的调用读取换行符并停止,产生一个空字符串。要更正,请在调用getline()
之前使用换行符(选项包括使用getline()
或ignore()
)。
请注意,有一个版本std::getline()
接受std::string
作为其参数,以避免使用char
的固定大小的数组,该数组在发布的代码中使用不正确。
答案 1 :(得分:0)
答案 2 :(得分:0)
以下是原始代码的修正版本:
#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[]
并使用the other getline
function。
答案 3 :(得分:0)
您遇到的问题是1234
之后的第一个换行符未被input_stream>>(int)
使用;所以下一个getline只读到该文件的末尾。
这是一个非常构建的场景,通常在学校作业中找到。读取文本文件时更常见的情况是将整个文件视为基于行的文本。
在这种情况下更方便
string line;
while( std::getline( input_stream, line ) ){
}
是合适的,并且不易出错。
文本文件通常具有预定义的格式。也许是name = value
行,并且在从文件中读取行之后将其解析为。