一种读取文件的方法,但要给出问题

时间:2011-06-12 07:33:59

标签: c++

我想逐行读取文件,这里是代码:

map<int,string>WordList ; //int is the key, string the returnad value
int GetWordList(char* file)
{
    WordList.clear();
    char getch;
    int wordindex=-1;
    string tempstring="";
    ifstream myFile(file);
    while (!myFile.eof())
    {
         myFile.get(getch);
         if (getch=='\r') continue; // skipping '\r' characters
         if (getch == '\n' || myFile.eof() )
         {
               WordList[++wordindex]=tempstring;
               tempstring="";
         }else  tempstring+=getch;
    }
    return wordindex; //returns the maximum index
}

我已经打电话了

 int totalStudents = GetWordList("C:\Students.txt");

我在该文件中有三行, 但是当我运行程序时,它不会从while循环退出,而且WordList总是0,

3 个答案:

答案 0 :(得分:4)

鉴于您使用连续整数作为索引,似乎没有理由使用std::map<int, string>而不仅仅是std::vector<std::string>

同样,用于将输入解析为行的代码似乎很少完成std::getline也不能很好地完成。

最后,您对文件结尾的测试并不正确。把它们放在一起就可以得到类似的东西。

std::vector<std::string> lines;

std::string line;
std::ifstream myFile(filename);

while (std::getline(myFile, line))
    lines.push_back(line);

您可能还想查看previous question的一些答案。

答案 1 :(得分:1)

又来了:Do not test against eof.

接下来,如果你总是想要读一行,为什么你的循环如此复杂?那是std::getline。建立你的循环,你应该没事。

答案 2 :(得分:0)

不要忘记逃避反斜杠:

GetWordList("C:\\Students.txt");