C++ 输入文件中的数组和结构出现问题
我正在为一门大学课程研究这个问题,我不确定为什么它不起作用。我认为我已经正确地设置了所有内容,但是当我尝试运行该程序时,在第一次尝试输入文件名时文件将无法打开,当我再次输入文件名时,我在“xmemory”部分得到了一个“Exception Switch”错误,我不知道这是什么意思 程序从中获取数据的输入文件只是包含以下数据的文本文件:C++ 输入文件中的数组和结构出现问题,c++,C++,我正在为一门大学课程研究这个问题,我不确定为什么它不起作用。我认为我已经正确地设置了所有内容,但是当我尝试运行该程序时,在第一次尝试输入文件名时文件将无法打开,当我再次输入文件名时,我在“xmemory”部分得到了一个“Exception Switch”错误,我不知道这是什么意思 程序从中获取数据的输入文件只是包含以下数据的文本文件: 201742 Sponge Bob 82.6 201701 Patrick Star 14.1 201753 Squidward Tentacles 85.43
201742 Sponge Bob 82.6
201701 Patrick Star 14.1
201753 Squidward Tentacles 85.43
201744 Sandy Squirrel 75.61
201700 Plankton Plank 100.0
课程的最终输出应显示最高和最低年级,以及学生的名字和姓氏、平均分数和受测学生人数。任何帮助都将不胜感激
// Zane Richards
// Lab 10 Q2
// 4/6/2020
#include <iostream>
#include <string>
#include <iomanip>
#include <sstream>
#include <fstream>
using namespace std;
struct student {
int ID;
string firstName;
string lastName;
float grade;
};
void maxGradeFunc(struct student* s, int size)
{
float maxGrade = 0;
string firstName, lastName;
for (int i = 0; i < size; ++i)
{
if (s[i].grade > maxGrade)
{
maxGrade = s[i].grade;
firstName = s[i].firstName;
lastName = s[i].lastName;
}
}
cout << "Maximum grade is " << maxGrade << endl;
cout << "The name of the student with the grade is: " << firstName << " " << lastName << endl;
}
void minGradeFunc(struct student* s, int size)
{
float minGrade = 999;
string firstName, lastName;
for (int i = 0; i < size; ++i)
{
if (s[i].grade < minGrade)
{
minGrade = s[i].grade;
firstName = s[i].firstName;
lastName = s[i].lastName;
}
}
cout << "Maximum grade is " << minGrade << endl;
cout << "The name of the student with the grade is: " << firstName << " " << lastName << endl;
}
void avgGradeFunc(struct student* s, int size)
{
float sum = 0;
for (int i = 0; i < size; ++i)
{
sum += s[i].grade;
}
float avg = sum / size;
cout << "Avearge grade is " << avg << endl;
cout << "The total number of students are: " << sum << " students" << endl;
}
int main()
{
ifstream inFile;
string fileName = "";
struct student s[5];
int ID;
string firstName, lastName;
float grade;
int i = 0;
cout << "Please enter the input file name: "; //File is named "Student.txt"
cin >> fileName;
while (!inFile.is_open()) {
cout << "Sorry, the file did not open. \nTry again, or type \"cancel\" to quit: ";
cin >> fileName;
if (fileName == "cancel") {
cout << "Cancelling..." << endl;
break;
}
else {
inFile.open(fileName);
}
}
while (inFile.is_open()) {
inFile >> ID;
s[i].ID = ID;
inFile >> firstName;
s[i].firstName = firstName;
inFile >> lastName;
s[i].lastName = lastName;
inFile >> grade;
s[i].grade = grade;
i++;
}
maxGradeFunc(s, 5);
minGradeFunc(s, 5);
avgGradeFunc(s, 5);
return 0;
}
//赞恩·理查兹
//实验室10 Q2
// 4/6/2020
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
结构学生{
int-ID;
字符串名;
字符串lastName;
浮子等级;
};
void maxGradeFunc(结构学生*s,整数大小)
{
float maxGrade=0;
字符串firstName,lastName;
对于(int i=0;i最大坡度)
{
maxGrade=s[i]。等级;
firstName=s[i].firstName;
lastName=s[i]。lastName;
}
}
cout解决了问题,删除了允许多次尝试的代码,并将其更改为仅打开文件并修复。感谢所有人的帮助,非常感谢!解决了问题,删除了允许多次尝试的代码,并将其更改为仅打开文件并修复。感谢帮助ryone,非常感谢!在用户输入文件名后,为什么要立即检查infle是否已打开?您实际上从未第一次尝试打开该文件。此外,您没有写“我在xmemory部分遇到异常抛出错误,但我不知道这意味着什么”,请复制并粘贴错误。你不需要描述错误,只需发布错误的具体内容。更糟糕的是,你不想描述错误。如果你还不知道错误的含义,你怎么能确定你没有漏掉那些允许有错误的人现在,在几秒钟内回答是什么意思?将!file.isopen()的循环更改为!file,因为您想检查它是否存在。您也可以检查该文件是否当前正在使用,但此逻辑使其无法运行…在此修复之后,我就遇到了输出问题。您的输入策略使用“>>”一个字符一个字符地循环,而不是完整的字符串没有第一次尝试打开文件。这就是为什么您总是看到错误消息。然后,您的第二个循环是一个infinte循环,因为文件是打开的,并且永远不会更改,所以循环将永远继续(直到您的程序崩溃)。从用户输入文件名后,为什么要立即检查infle是否已打开?您实际上从未第一次尝试打开该文件。此外,您没有写“我在xmemory部分遇到异常抛出错误,但我不知道这意味着什么”,请复制并粘贴错误。你不需要描述错误,只需发布错误的具体内容。更糟糕的是,你不想描述错误。如果你还不知道错误的含义,你怎么能确定你没有漏掉那些允许有错误的人现在,在几秒钟内回答是什么意思?将!file.isopen()的循环更改为!file,因为您想检查它是否存在。您也可以检查该文件是否当前正在使用,但此逻辑使其无法运行…在此修复之后,我就遇到了输出问题。您的输入策略使用“>>”一个字符一个字符地循环,而不是完整的字符串没有第一次尝试打开该文件。这就是为什么您总是看到错误消息。然后,您的第二个循环是infinte循环,因为该文件是打开的,并且永远不会更改,所以循环将永远继续(直到您的程序崩溃)。