在C ++中从.text文件中读取多行


Issue reading multiple lines from .txt file in C++

我正在为一个学校项目创建一个学生数据库系统。我正在尝试创建一个函数,它将在.txt文件中搜索学生ID并返回字符串中的所有其他变量。如果我在TXT文件的第一行搜索学生的ID,但在另一行搜索学生时没有捕获任何内容,那么这就非常有效。我是否遗漏了一些明显的东西?

学生数据是16个字符串,每行用逗号分隔。学生ID是第一个字符串。

谢谢你的帮助!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
StudentType findStudent(int studentToFind)
{
    ifstream inFile;
    inFile.open("students.txt");

    string currentLine;
    string dataRead[16];
    istringstream is;
    int currentStudent;

    if (inFile)
    {
        while (getline(inFile, currentLine))
        {
            is.str(currentLine);

            for (int i = 0; i < 16; i++)
            {
                getline(is, dataRead[i], ',');
            }

            currentStudent = stoi(dataRead[0]);

            if (currentStudent == studentToFind)
            {
                /*
                 Do stuff here
                */


                inFile.close();
                return foundStudent;
            }
            cin.ignore(); // Not sure if this is needed but I was trying to
                          // clear the
 char if that was causing the issue
        }
    }
}


第一:你没有使用cin,所以去掉cin.ignore()

第二:你应该确保你总是在最后关闭中缀…所以我建议不要提前返回或提前关闭,而是使用break语句退出循环,然后返回一个单独的返回,以确定是否找到它。

第三:既然你把所有的"血腥"都去掉了,我们终于可以解决这个问题了……实际上,问题是我们是否阅读了所有的行?

好吧,让我们检查一下,在while循环开始时,尝试每次打印currentLine,如果您知道currentLine已正确更新,那么is是否每次都得到更新?对。。。

好的,那看看你的下一个循环,让我们每次打印出currentStudent……currentStudent是否为每行打印正确的值?也就是说,getline写入dataRead[i]是否实际写入了您认为它应该是正确的空间?

你找到问题了吗?

这是您需要学习如何使用print语句和调试器来解决的问题。这就是为什么。如果您在Visual Studio中,请以调试模式运行并单步执行…如果没有,使用gdb。学习并习惯它,你会经常使用它的!

祝你好运