Вопрос:
Когда я компилирую его, он говорит “предупреждение C4700: используется неинициализированная локальная переменная count”. Я не уверен, почему это говорит об этом, и я не пришел сюда, чтобы кто-то мог сделать мою домашнюю работу. просто ищу помощь в этой ошибке, я знаю, что это связано с определением функции ReadStudentData или Main.
благодаря
#include<iostream> #include<fstream> #include<string> using namespace std; struct StudentType {string studentName; int testScore;//Between 0 and 100 char grade; }student[20]; void PrintNameHeader(ostream& out); bool OpenInputFile(ifstream& inFile, string& infilename ); //OPEN input file void Pause();// Pause void ReadStudentData(ifstream& infile, StudentType student[], int& );// Read student infp including first and last name and test score void AssignGrades(StudentType student[], int);//assign grades to each student int HighestScore(const StudentType student[], int );//Get the highest scores void PrintNamesWithHighestScore(const StudentType student[], int);//Print name with highest Scores void DisplayAllStudents(const StudentType student[], int);//Display all students void GetLowHighRangeValues(int& , int&);//for example a student types 50 100 , it will get all students within that range void DisplayStudentsInRange(const StudentType student[], int, int, int);// display students in that range void SortStudentsByName(StudentType student[], int);// sort students by name void SortStudentsByScore(StudentType student[], int);// sort students by test score highest to lowest const int NUM_STUDENTS = 20; int main() { ifstream infile; string inFilename; int count = 0; StudentType student[NUM_STUDENTS]; int numStudents; PrintNameHeader(cout); OpenInputFile(infile,inFilename); ReadStudentData(infile, student, numStudents); AssignGrades(student, numStudents); return 0; } //Function definitions void PrintNameHeader(ostream& out) { //Display name header on screen cout << «name» << endl; } bool OpenInputFile(ifstream& inFile, string& infilename) { cout << «Enter the name of the .txt file that you want to open for input.n»; cout << «Do not put spaces in the file name «; cin >> infilename; cout << endl; inFile.open(infilename.c_str()); if (inFile.fail()) { cout << «Sorry, the input file » << infilename <<» was not found»<< endl; return false; } cout << «Input file » << infilename << » is open for reading.nn»; return true; } void Pause() { cout << endl; cin.ignore(80, ‘n’); cout<<«Please hit the enter key to continue…n»; cin.get(); } void ReadStudentData(ifstream& infile, StudentType student[], int& numstudents) { string firstName, LastName, testScore; int count = 0; if( infile) for (int count; count < NUM_STUDENTS; count++) { cin >> firstName[count] >> LastName[count] >> testScore[count]; student[count].studentName = firstName + «, » + LastName; } numstudents = count; cout << numstudents << endl; } void AssignGrades(StudentType student[], int numstudents) { int i; for(i=0;i< NUM_STUDENTS;i++) switch((int)(student[i].testScore/10)) {case 10: case 9: student[i].grade=’A’; break; case 8: student[i].grade=’B’; break; case 7: student[i].grade=’C’; break; case 6: student[i].grade=’D’; break; default: student[i].grade=’F’; break; } } int HighestScore(const StudentType student[], int numstudents) { int max=0,i; for(i=1;i<numstudents;i++) { if(student[i].testScore>student[max].testScore) max=i; } return max; } void PrintNamesWithHighestScore(const StudentType student[], int numstudents) { } void DisplayAllStudents(const StudentType student[], int numstudents) { } void GetLowHighRangeValues(int& lowRange, int& highRange) { } void DisplayStudentsInRange(const StudentType student[], int numStudents, int lownum, int highNum) { } void SortStudentsByName(StudentType student[], int numStudents) { } void SortStudentsByScore(StudentType student[], int numstudents) { } Лучший ответ:
Он ссылается на следующее:
for (int count; count < NUM_STUDENTS; count++) // ^^^^^^^^^
Возможно, вам потребуется инициализировать count, предположительно, до 0:
for (int count = 0; count < NUM_STUDENTS; count++)
или, может быть, вы хотите использовать один и тот же count объявленный во внешнем блоке:
for (; count < NUM_STUDENTS; count++) Ответ №1
Вы определяете другую переменную count внутри параметра for, которая не инициализируется. вы должны либо инициализировать его для:
for (int count = 0; count < NUM_STUDENTS; count++)
или удалить декларацию, если она вам нужна во внешней области:
for (; count < NUM_STUDENTS; count++) Ответ №2
C и C++ имеют два различных компонента для подготовки переменной/объекта для использования. Декларация и инициализация.
Это декларации:
int i; Object o; struct Foo;
Они объявляют вещи, они не сообщают компилятору, какие значения они должны начать. Следующее правовое:
int meaning; if (day == «Thursday») meaning = 42; else meaning = 0;
Этот код гарантирует, что значение всегда имеет значение.
К сожалению, в C и C++ примитивные типы, такие как int и т.д., Не имеют хороших, безопасных значений по умолчанию. Итак, если вы написали:
int meaning; if (day == «Thursday») meaning = 42; else if (day == «Friday») meaning = 0;
Какова ценность “значения”, когда день “понедельник”? Если вы думаете о номере, вы ошибаетесь. Ответ: Он не определен.
Компилятор позволит вам создать такой код, но он предоставит вам ошибку, которая поможет вам защитить себя.
Чтобы объявить И инициализировать переменную в одно и то же время, просто выполните:
int meaning = 0; if (day == «Thursday») meaning = 42;
В вашем коде проблема заключалась в следующем:
for (int count; count < NUM_STUDENTS; ++count)
это должно быть
for (int count = 0; count < NUM_STUDENTS; ++count)
в противном случае программа могла бы скомпилироваться, но начальным значением “count” может быть любое число из -2 ^ 31 до +2 ^ 31.