我正在尝试为学校项目创建学生数据库系统。我正在尝试创建一个函数,它将在.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
}
}
}
答案 0 :(得分:3)
首先:你没有使用cin
,所以摆脱cin.ignore()
。
第二:你应该确保你总是在最后关闭infile ...所以我建议你不要提前返回或早点关闭,但是使用break语句退出你的循环,然后单独返回你是否找到它或不。
第三:既然你已经删除了所有'gorp',我们终于可以解决这个问题......有效的问题是我们是否阅读了所有的内容?让我们检查一下,尝试每次在while循环开始时打印currentLine
,如果您知道currentLine
已正确更新,is
每次都会更新吗?是...
好的,然后看看你的下一个循环让我们每次打印currentStudent
... currentStudent
是否为每一行打印正确的值?也就是getline写入dataRead[i]
实际写出你认为它应该在正确的空间?
你找到问题了吗?
这是您需要学习如何使用print语句和调试器来解决问题的问题。它是什么。如果你在visual studio中以调试模式运行并逐步执行它...如果没有,请使用gdb。学习并习惯它,你会经常使用它!
祝你好运