为什么'getline'初始化信息?

时间:2017-04-26 16:53:34

标签: c++ class getline strtok

while (!fin.eof())
{
    fin.getline(read, 49); subcnt++;    
    i_sequence = subcnt;                
    i_name = my_tok(read, "/");         
    i_price = atoi(my_tok(NULL, "/"));  
    i_quantity = atoi(my_tok(NULL, "/"));

    if (subcnt <= 10)
        loadlist[subcnt-1].setList(i_sequence, i_name, i_price, i_quantity);
}

my_tok是我使用的函数,而不是strtokloadlist类包含有关项目的信息。

我希望这个加载函数从“ItemList.txt”文件中逐行读取信息,并将写入的信息保存到类中。 第一个循环是按照我的意愿实现的,但是当涉及下一个循环并调用fin.getline(read,49)时,所有先前保存的信息都会被初始化。

我不知道为什么在调用fin.getline时信息会不断变化。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

尝试更改打开文件的代码并将循环中的行读取为以下内容:

#include <fstream>
#include <iostream>
#include <string>

int main (int argc, char* argv[])
{
    std::string line;
    std::ifstream fin("ItemList.txt");
    if (fin)
    {
        while (std::getline(fin, line))
        {
            // add code here to process each line
        }

        fin.close();
    }

    return 0;
}

答案 1 :(得分:0)

my_tok

i_name函数返回指向缓冲区的指针,对吗?并且您已将该指针保存在feof

好吧,既然您已将指针保存到缓冲区中,当您更改缓冲区中的内容时,您可以更改指针指向的值。您需要复制要保存的值并使用指向副本的指针。

此外,正如其他人所指出的那样,您使用{{1}}是不正确的。它无法预测未来。