2013-11-05 66 views
0

当我编译它说“使用警告C4700:未初始化的本地变量”计数“。 我不知道为什么这么说,我没有来这里,所以有人可以做我的功课。 只是寻找这一个错误的帮助,我知道它与函数定义ReadStudentData或主要。警告C4700:未初始化的本地变量

感谢

#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.\n\n"; 
    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) 
{ 

} 

回答

3

它指的是这样的:

for (int count; count < NUM_STUDENTS; count++) 
// ^^^^^^^^^ 

您可能需要初始化count,大概是为了0

for (int count = 0; count < NUM_STUDENTS; count++) 

也许你的意思是使用相同的count在外部块中声明:

for (; count < NUM_STUDENTS; count++) 
+0

哦,是啊,杜不能相信我错过了,谢谢你们俩! –

2

您可以在for中定义另一个计数变量,该变量未被初始化。您应该初始化为:

for (int count = 0; count < NUM_STUDENTS; count++) 

或删除的声明(如果需要)在外面的范围:

for (; count < NUM_STUDENTS; count++) 
0

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; 

当day是“Monday”时,“意义”的值是什么?如果你想要一个数字,你错了。答案是:没有定义。

编译器会让你建立这样的代码,但它会提供你看到的错误来帮助你保护自己。

声明并同时初始化变量,简单地做:

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之间的任何数字。