C ++:从文本文件中读取并分成变量

Posted

技术标签:

【中文标题】C ++:从文本文件中读取并分成变量【英文标题】:C++: Read from text file and separate into variable 【发布时间】:2010-10-15 22:19:58 【问题描述】:

我在一个文本文件中有这个:

John 20 30 40
mike 30 20 10

我如何从文本文件中读取并将它们分成变量名、var1、var2、var3。 这是我的尝试,似乎它不起作用。请帮忙。

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;

int main () 
  string name,result;
  int number1;
  ifstream myfile ("marks.txt");
  if (myfile.is_open())
  
    while ( !myfile.eof() )
    
      getline (myfile,name,'\t');
      getline (myfile,var1,'\t');
      getline (myfile,var2,'\t');
      getline (myfile,var3,'\t');
      cout << name << var1 << var2 << var3;


    

    myfile.close();

  

  else cout << "Unable to open file";

  return 0;

编辑 1:

夜曲建议:

#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;


int main()

    ifstream inputFile("marks.txt");
    string line;

    while (getline(inputFile, line))
    
        istringstream ss(line);

        string name;
        int var1, var2, var3;

        ss >> name >> var1 >> var2 >> var3;
        cout << name << var1 << var2 << var3 << endl << endl;
    

输出:

John203040

mike302010

302010

为什么还有一个 302010???

【问题讨论】:

你的输入文件肯定是制表符分隔的吗?你得到什么输出? “似乎它不起作用”没有帮助。请提供详细信息。 “似乎它不起作用”不是对问题的充分描述。哪些症状会导致您得出这样的结论:这段代码没有按照您的预期执行?您是否尝试过附加一个调试器来单步执行程序并查看有什么不正常的地方? 【参考方案1】:

这样的东西应该可以工作(我手边没有编译器,所以你可能需要稍微调整一下):

#include <iostream>
#include <sstream>
using namespace std;


int main()

    ifstream inputFile("marks.txt");
    string line;

    while (getline(inputFile, line))
    
        istringstream ss(line);

        string name;
        int var1, var2, var3;

        ss >> name >> var1 >> var2 >> var3;
    

编辑:刚刚又看到这个,不知道为什么我之前选择了get line的方法。以下(更简单的解决方案)不起作用吗?

#include <fstream>
using namespace std;

int main()
 
    ifstream fin(“marks.txt”);

    string name;
    int var1;
    int var2;
    int var3;

    while (fin >> name >> var1 >> var2 >> var3)
    
        /* do something with name, var1 etc. */
        cout << name << var1 << var2 << var3 << “\n”;
    

【讨论】:

夜曲,你的工作正常。我添加了 #include 和 cout 文件末尾必须有一个空行。【参考方案2】:

看来您需要声明 var1、var2 和 var3。

也可以代替这个:

      getline (myfile,name,'\t');
      getline (myfile,var1,'\t');
      getline (myfile,var2,'\t');
      getline (myfile,var3,'\t');

试试这个:

  myfile >> name;
  myfile >> var1;
  myfile >> var2;
  myfile >> var3;

不是因为你有错,而是第二个更干净,可以处理所有空白。

【讨论】:

【参考方案3】:

我认为当数字被打印在一个没有空格的组中时,原因只是你需要在变量之间放置空格,如下所示:

cout << name << " " << var1 << " " << var2 << " " << var3 << "\n";

【讨论】:

以上是关于C ++:从文本文件中读取并分成变量的主要内容,如果未能解决你的问题,请参考以下文章

如何用VBS逐行读取文本文件的内容,并输入变量

在C++中如何读取文本中的数据存储为数组变量?

C ++从文本文件中读取行并编辑

从文本文件中读取单词并存储到 C 中的动态数组 Valgrind 错误中

保存名称从文本框中读取的文件。 C#

如何从文本文件中读取数据库凭据?