知道我的一个同学已经就这个话题提出了类似的问题,但是我仍然无法理解这应该如何运作。 这是包含假学生信息的文件设置:
918273645,Steve,Albright,ITCS2530,MATH210,ENG140
123456789,Kim,Murphy,ITCS2530,MATH101
213456789,Dean,Bowers,ITCS2530,ENG140
219834765,Jerry,Clark,MGMT201,MATH210
由于某种原因,我只能读取文本文件的第一行而不是下面的任何行。我需要弄清楚如何读取每行的前9个字符并将它们与用户输入进行比较。然后继续该行的其余部分。但是无法弄清楚我哪里出错了。
这是我到目前为止所做的:
void Login()
{
Student NewStudent;
ifstream inFile;
ifstream outFile;
string inFileName = "C:\\Users\\Prophet\\Desktop\\registration.txt";
string outFileName = "C:\\Users\\Prophet\\Desktop\\registration.txt";
openInputFile(inFile, inFileName);
while (true)
{
cout << "Please enter your student ID\n" << endl;
cin >> NewStudent.StudentID;
if (NewStudent.StudentID.length() == 9)
break;
else
cout << "That ID is invalid - IDs are 9 digits" << endl;
}
if (inFile.is_open())
{
while (!inFile.eof())
{
string line;
while (getline(inFile, line))
{
stringstream ss(line);
string StudentID, FirstName, LastName, ListOfCourses;
getline(ss, StudentID, ',');
getline(ss, FirstName, ',');
getline(ss, LastName, ',');
getline(ss, ListOfCourses, ',');
cout << "\n";
{
if (StudentID == NewStudent.StudentID)
{
cout << "Welcome to the Macomb Community College enrolment system " << FirstName << " " << LastName << endl;
inFile.close();
MainMenu();
}
if (StudentID != NewStudent.StudentID)
{
cout << "Welcome New student" << endl;
cout << "Please enter yuour first name: ";
cin >> NewStudent.FirstName;
cout << "Please enter yuour last name: ";
cin >> NewStudent.LastName;
outFile.open("C:\\Users\\Prophet\\Desktop\\registration.txt");
openOutputFile(outFile, outFileName);
MainMenu();
}
}
}
}
}
}
答案 0 :(得分:0)
在读取文件的主循环中,在StudentID == NewStudent.StudentID
时中断,在StudentID != NewStudent.StudentID
时中断,这意味着在读完第一行后总是完成循环。
当从基于行的记录中读取字段时,首先在行中读取并将其存储在字符串流中然后从那里读取字段总是更容易。但除非您将代码更改为仅在找到ID时停止,否则这将无济于事。
备注while (!inFile.eof())
可能会给出错误的结果。您最好按照已说明的many times on this site检查阅读结果。
答案 1 :(得分:0)
您目前在循环中使用break
,因此在第一行之后它不会进入第二行。而不是break
,您必须使用continue
。