C++ 如何修复';未在此范围内声明ARRSSTUD';C+中的错误+;
我目前正在编写一个程序,它将在4列(ID、名字、姓氏和GPA)中显示学生记录,按升序对他们的记录进行排序,并从排序后的学生记录中将每个GPA重置为0.0 学生记录存储在一个名为“StudentInfo.txt”的文本文件中 我遇到的问题是在C++ 如何修复';未在此范围内声明ARRSSTUD';C+中的错误+;,c++,C++,我目前正在编写一个程序,它将在4列(ID、名字、姓氏和GPA)中显示学生记录,按升序对他们的记录进行排序,并从排序后的学生记录中将每个GPA重置为0.0 学生记录存储在一个名为“StudentInfo.txt”的文本文件中 我遇到的问题是在ifstream inputFile之前声明一个结构数组。在第42、53和68行显示一条错误消息,显示“ARRSSTUD未在此范围内声明” 我尝试实现了studentInfo**arrStud[SIZE]和studentInfo*arrStud[SIZE],但
ifstream inputFile
之前声明一个结构数组。在第42、53和68行显示一条错误消息,显示“ARRSSTUD未在此范围内声明”
我尝试实现了studentInfo**arrStud[SIZE]
和studentInfo*arrStud[SIZE]
,但没有成功,出现了另一堆错误
如果有人能帮我解决这个问题,我将不胜感激
我当前的代码:
#include <string>
#include <iomanip>
#include <fstream>
#include <iostream>
using namespace std;
struct studentInfo
{
int ID;
string firstName;
string lastName;
double GPA;
};
const int SIZE = 100;
void display(/*parameter*/,int);
void resetGPA(studentInfo **, int);
void sortStud(studentInfo **, int);
int main()
{
int counter = 0;
int ID;
string firstName;
string lastName;
double GPA;
// Declare arrStud here...
ifstream inputFile;
inputFile.open("StudentInfo.txt");
if (inputFile.is_open())
{
cout << "ID:" << setw(15) << "Name:" << setw(14) << "GPA:" << endl;
cout << "-------------------------------------------" << endl;
while(!inputFile.eof())
{
inputFile >> ID >> firstName >> lastName >> GPA;
arrStud[counter] = new studentInfo;
arrStud[counter]->ID = ID;
arrStud[counter]->firstName = firstName;
arrStud[counter]->lastName = lastName;
arrStud[counter]->GPA = GPA;
counter++;
}
for (int i = 0; i < counter; i++)
cout << i << arrStud[i]->ID
<< setw(8) << arrStud[i]->firstName
<< setw(10) << arrStud[i]->lastName
<< setw(8) << arrStud[i]->GPA
<< endl;
cout << "-------------------------------------------" << endl;
cout << endl;
inputFile.close();
}
else
cout << "File cannot be opened.";
inputFile.close();
display(arrStud, counter);
cout << endl;
cout << "Sorting Students by ID..." << endl;
cout << endl;
sortStud(arrStud, ID);
cout << endl;
cout << "Resetting GPA Data..." << endl;
cout << endl;
resetGPA(arrStud, GPA);
}
void display()
{
}
void resetGPA(studentInfo** students, int numStu)
{
for (int i = 0; i < numStu; i++)
{
students[i]->GPA = 0.0;
}
}
void sortStud(studentInfo** students, int numStu)
{
int lowestIDIndex; //holds the index in the array students of the student with the lowest ID
for (int i = 0; i < numStu; i ++)
{
lowestIDIndex = i; //always start with lowest ID being first student
for (int j = i; j < numStu; j++) //j is equal to i so that you don't search the already sorted elements, which are less than i
{
if (students[j]->ID < students[lowestIDIndex]->ID) //search for the lowest ID
{
lowestIDIndex = j; //keep track of the lowest ID
}
}
//switch the lowest element with the front-most element
studentInfo* tempStuPtr = students[i];
students[i] = students[lowestIDIndex];
students[lowestIDIndex] = tempStuPtr;
}
}
您的代码中没有声明任何内容!在
main()
函数的顶部附近,您需要这样的内容(或者您可以将其作为全局变量,比如说在main
的定义之前):
然后,在main
结束时(或接近结束时),您需要释放通过new
调用创建的内存:
for (int c = 0; c < counter; ++c) delete arrStud[c];
您的代码中还有许多其他错误!如果为下一次生成启用编译器警告,这些警告将变得清晰。
ID: Name: GPA:
-----------------------------------
123456789 John Johnson 3.5
512434990 Mary Jackson 3.9
342432444 Peter Young 2.3
470068625 Jim Lee 2.9
234324324 Tammy Gaddis 3.1
121219000 Ester Schwab 2.7
-----------------------------------
Sorting Students by ID...
ID: Name: GPA:
-----------------------------------
512434990 Mary Jackson 3.9
123456789 John Johnson 3.5
234324324 Tammy Gaddis 3.1
470068625 Jim Lee 2.9
121219000 Ester Schwab 2.7
342432444 Peter Young 2.3
-----------------------------------
Resetting GPA Data...
ID: Name: GPA:
-----------------------------------
512434990 Mary Jackson 0.0
123456789 John Johnson 0.0
234324324 Tammy Gaddis 0.0
470068625 Jim Lee 0.0
121219000 Ester Schwab 0.0
342432444 Peter Young 0.0
-----------------------------------
studentInfo* arrStd[SIZE];
for (int c = 0; c < counter; ++c) delete arrStud[c];
void display(studentInfo**, int);
void display(studentInfo** students, int numStu)
{
// Do something here, I guess!
}