在C ++中从.txt文件中读取多行的问题

时间:2016-03-22 19:47:43

标签: c++

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

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

感谢您的帮助!

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 \n char if that was causing the issue
        }
    }
}

1 个答案:

答案 0 :(得分:3)

首先:你没有使用cin,所以摆脱cin.ignore()

第二:你应该确保你总是在最后关闭infile ...所以我建议你不要提前返回或早点关闭,但是使用break语句退出你的循环,然后单独返回你是否找到它或不。

第三:既然你已经删除了所有'gorp',我们终于可以解决这个问题......有效的问题是我们是否阅读了所有的内容?

让我们检查一下,尝试每次在while循环开始时打印currentLine,如果您知道currentLine已正确更新,is每次都会更新吗?是...

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

你找到问题了吗?

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

祝你好运