[英]C++ Weird File Line Read
我是 C++ 编程的新手,并试图找出从文本文件中读取一行时奇怪的行读取行为。 对于这个特定的程序,我必须等待用户在阅读下一行之前按回车。
如果我对文件名进行硬编码,则文件读取按预期从第 1 行开始:
#include <iostream>
#include <fstream>
using namespace std;
int main(void) {
ifstream in_file;
in_file.open("test.txt");
// read line by line
string line;
while (getline(in_file, line)) {
cout << line;
cin.get();
}
in_file.close();
return 0;
}
我用g++ -Wall -std=c++14 test1.cpp -o test1
编译并得到:
$ ./test
This is line one.
**user presses enter**
This is line two.
**user presses enter**
This is line three.
etc. etc.
但是当我添加让用户输入文件名的选项时,读取的行从第 2 行开始:
#include <iostream>
#include <fstream>
using namespace std;
int main(void) {
string filename;
cin >> filename;
ifstream in_file;
in_file.open(filename);
// read line by line
string line;
while (getline(in_file, line)) {
cout << line;
cin.get();
}
in_file.close();
return 0;
}
相同的编译命令给了我:
$ ./test2
test.txt
This is line two.
**user presses enter**
This is line three.
**user presses enter**
This is line four.
etc. etc.
我在这里错过了什么吗? 我不知道为什么当我添加代码以指定文件名时它从第 2 行开始读取。 我没有正确完成cin语句还是什么?
谢谢!
默认情况下 ** operator cin >> ** 读取数据直到第一个空白字符并且空白字符不是提取参考。 所以如果你读到像这样的文件名cin>>file;
文件变量将仅包含字符串的第一部分,不包含空格。 这样在阅读时您就不会遇到此类问题,请使用getline
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main(void) {
string filename;
getline(cin, filename, '\n');
ifstream in_file;
in_file.open(filename);
// read line by line
string line;
while (getline(in_file, line)) {
cout << line;
cin.get();
}
in_file.close();
return 0;
}
#include <iostream>//basic
#include <fstream>//file
using namespace std;
int main(){
//set file name
string file="";
cout<<"file name: ";
cin>>file;
//create/write to file
ofstream out_file;
out_file.open(file);
out_file<<"test 1\ntest 2\ntest 3";
out_file.close();
//read file
ifstream in_file;
in_file.open(file);
string line;
cin.ignore();//clear buffer
while(getline(in_file,line)){
cout<<line;
cin.get();
}
in_file.close();
system("pause");
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.