我想逐行读取文件,这里是代码:
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,
答案 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)
接下来,如果你总是想要读一行,为什么你的循环如此复杂?那是std::getline
。建立你的循环,你应该没事。
答案 2 :(得分:0)
不要忘记逃避反斜杠:
GetWordList("C:\\Students.txt");