【问题标题】:Reading From File To Node in C++在 C++ 中从文件读取到节点
【发布时间】:2014-03-04 00:42:57
【问题描述】:

我正在尝试从文件中读取单词和数字并将它们插入到 Node 结构中。 有一个包含 StudentNames 和 StudentNumbers 的文件。 我创建了一个类似的结构:

struct Node
{
    string Name;
    int Number;
    Node *next;

    Node::Node(){}

    Node::Node(string ID, int No):Name(ID), Number(No){}
};  

我试图在创建节点时将名称和数字直接放入节点。

string filename, line,names;
int nos;
cout<<"Enter Filename: ";
cin >> filename;
ifstream input(filename);

if(input.fail())
{
    cout<<"\n FAILED TO OPEN FILE";
}

else
{
    getline(input, line);
    stringstream  word;
    word>>names
    word>>nos


    Node *p;
    p=new Node(names,nos);
    cout<<p->Name<<p->Number;
}

我的逻辑是它将单词读入名称,因为它们是字符串,并且它将数字部分读入 nos 因为 nos 是 int 它不会只接受字符串整数。但它不会将名称和编号保留为 "" idk how。

这基本上就是我想要做的。我需要使用包含名称和数字的这些节点创建一个链接列表。

另一个问题是我不明白 *next 是如何指向下一个节点的。

对不起,如果它令人困惑,但我也很困惑 :))

输入文件示例

L0RDQB  12345
LordQb  23456
...

【问题讨论】:

  • 你忘了用line初始化word
  • 您的结构结合了两个独立的概念:1) 包含名称和编号的节点和 2) 链表。更好的做法是为一个目的创建两个单独的数据结构。此外,如果您要将文件中的数据读取到类(或结构)中,通常可以方便地为此目的定义一个 iostream 提取器。

标签: c++ pointers readfile


【解决方案1】:

为接受istreamNode 创建第二个构造函数:

Node::Node(istream &is) { is >> Name >> Number; }

我会将 eof 检测作为练习留给读者。

【讨论】:

  • 如果输入文件只包含名称但不包含数字会发生什么,也值得思考。
猜你喜欢
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多