首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:从文本文件中读取并分离为变量

C++:从文本文件中读取并分离为变量
EN

Stack Overflow用户
提问于 2010-10-16 06:19:58
回答 3查看 86.5K关注 0票数 11

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

代码语言:javascript
复制
John 20 30 40
mike 30 20 10

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

代码语言:javascript
复制
#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:

夜曲建议:

代码语言:javascript
复制
#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;
    }
}

输出:

代码语言:javascript
复制
John203040

mike302010

302010

为什么又要增加302010?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-16 06:50:31

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

代码语言:javascript
复制
#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方法。下面的(更简单的解决方案)不起作用吗?

代码语言:javascript
复制
#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”;
    }
}
票数 14
EN

Stack Overflow用户

发布于 2010-10-16 06:40:42

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

也不是这样:

代码语言:javascript
复制
      getline (myfile,name,'\t');
      getline (myfile,var1,'\t');
      getline (myfile,var2,'\t');
      getline (myfile,var3,'\t');

试试这个:

代码语言:javascript
复制
  myfile >> name;
  myfile >> var1;
  myfile >> var2;
  myfile >> var3;

这并不是因为你所拥有的是错误的,而是第二个更干净,可以处理所有的空格。

票数 4
EN

Stack Overflow用户

发布于 2018-08-18 21:33:50

我认为当数字以一组没有空格的形式打印出来时,原因是您需要在变量之间加上空格,如下所示:

代码语言:javascript
复制
cout << name << " " << var1 << " " << var2 << " " << var3 << "\n";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3946558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档