0

コンパイルすると、「警告 C4700: 初期化されていないローカル変数 'c​​ount' が使用されています」と表示されます。なぜこれを言っているのかわかりませんが、誰かが宿題をするためにここに来なかったのです。この 1 つのエラーについてヘルプを探しているだけですが、関数定義 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.\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)
{

}
4

3 に答える 3

3

それはこれを指します:

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

countおそらく次のように、を初期化する必要がある場合があります0

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

またはcount、外側のブロックで宣言されたものと同じものを使用することを意味している可能性があります。

for (; count < NUM_STUDENTS; count++)
于 2013-11-05T07:09:23.397 に答える
2

for 内で別のカウント変数を定義しますが、これは初期化されていません。次のように初期化する必要があります。

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

または、スコープ外で必要な場合は宣言を削除します。

for (; count < NUM_STUDENTS; count++)
于 2013-11-05T07:10:37.037 に答える
0

C と C++ には、使用する変数/オブジェクトを準備するための 2 つの異なるコンポーネントがあります。宣言と初期化。

これらは宣言です:

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 までの任意の数値になる可能性があります。

于 2013-11-05T07:44:15.050 に答える