繁体   English   中英

C++ 奇怪的文件行读取

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM