c++ - 如何修复 C++ 中的“arrStud 未在此范围内声明”错误
问题描述
我目前正在编写一个程序,它将在 4 列(ID、名字、姓氏和 GPA)中显示学生记录,按升序对他们的记录进行排序,并将每个 GPA 从排序的学生重置为 0.0记录。
学生记录存储在我称为“StudentInfo.txt”的文本文件中
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
我遇到的问题是在之前声明一个结构数组ifstream inputFile
。错误消息显示"arrStud was not declared in this scope"
在第 42、53 和 68 行。
我试图实施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;
}
}
预期输出:
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
-----------------------------------
解决方案
您的代码中没有任何地方arrStud
声明!你需要这样的东西,靠近你的main()
函数顶部(或者你可以把它作为一个全局变量,比如在定义之前main
):
studentInfo* arrStd[SIZE];
然后,在(或接近)结束时main
,您需要释放new
调用创建的内存:
for (int c = 0; c < counter; ++c) delete arrStud[c];
您还需要更正display
函数的声明和定义,如下所示:
void display(studentInfo**, int);
void display(studentInfo** students, int numStu)
{
// Do something here, I guess!
}
推荐阅读
- google-api - 通过 API 或库进行 Youtube 私有访问管理
- c - char** : 正确解析整个内存
- javascript - 如何访问从函数表达式返回的值?
- reactjs - react 是否允许传递语义上不同的子集?
- html - 如何从列表项中缩放画布?
- mysql - AWS Athena 中的 MYSQL
- reactjs - React 需要网络服务器吗?Web 应用服务器和 React 是如何通信的?
- websphere - 如何下载 com.ibm.ws.orb_8.5.0.jar
- javascript - 如何创建用于 TypeScript 泛型的 JavaScript 变量
- javascript - 在 React 功能组件中调用了两次 setTimeout 回调?