私はc++クラスの最終プロジェクトに取り組んでいます。手順は明確ではありませんが、どちらの場合も、コードをコンパイルしましたが、何も出力されません。私のコードを確認して、不足しているものを教えてください。彼女が求めているのは次のとおりです。
このプログラムには、tryとcatchを使用したエラートラップが含まれます。
ユーザー入力を取得する各関数にスローを入れ、メジャー0が入力された場合は文字列「BadMajor」をスローします。入力機能は、以下の2、4、7で指定されています。
次のようにグローバル構造を作成します。
struct Student
{
char Name[30];
float GPA;
int Major;
};
主にその構造の2つのインスタンスを作成します。それらをS1およびS2と呼びます。
StudentDataという名前の関数を作成して呼び出します。S2=StudentData(S1); //これは関数の呼び出しです関数はパラメータとして構造体への参照を受け取り(プロトタイピングはこれを処理します)、構造体への参照を返します。ユーザーからデータを取得するには、coutsとcinsを使用します。テストの目的で、GPAが3.5、メジャーが2になるようにS1のデータを変更します。ユーザーからデータを取得するためにcinを使用するため、ユーザーであり、これらの値を入力するだけです。関数の呼び出し後、S1とS2の両方に同じデータが含まれます。
メインでは、coutを使用して構造体S1およびS2に格納されているデータを印刷します。
S2へのポインタを引数としてChangeDataという名前の関数を呼び出します。ChangeData(&S2); //これは関数の呼び出しです。GPAが3.0、メジャーが1になるようにS2のデータを変更します(これらの値をテストに使用します…)
メインに戻り、coutを使用して構造体S2に格納されているデータを印刷します。
次に、mainに2つの構造体の配列を作成します。配列Studentsを呼び出します。
関数GetStudentsを作成します。この関数は、要素の数を表す配列とintを受け取ります(2)。関数で、データをループし、cin、cin.getline、およびcoutステートメントを使用してユーザーから3つのフィールドすべてを取得します。このように整理します。
for(...........){cout prompt to user cin.getline for name cout prompt to user cin for GPA cout promp to user cin for Major cin.ignore(1); }
問題は、数値のcinがキーボードバッファにENTERキーを残すことです。これは、cinやその他の数値では問題ありませんが、文字列では問題ないため、自分で削除する必要があります。cin.ignoreがこれを処理する必要があります。
mainから関数GetStudentsを呼び出します。
GetStudentsと同じ引数を受け取る関数PrintStudentsを作成します。生徒の配列を2行、生徒ごとに1行で印刷します。
これが私のコードです:
#include<iostream>
#include<iomanip>
using namespace std;
//Global variable to determine size of name
const int Name_Size = 30;
//Structure
struct Student
{
char Name[30];
float GPA;
int Major;
};
//Function Prototypes
Student* studentData(Student &S1);
Student* changeData(Student &S2);
Student getStudent(Student array[], int size);
Student printStudents(Student array[], int size);
int main()
{
Student S1; // structure instance called S1.
Student S2; // structure instance called S2.
Student student[2]; //array of 2 structures.
S2 = *studentData(S1); //Calls the studentData function.
changeData(S2); //Calls the changeData function.
getStudent(&S1, 2); //Calls the getStudent function.
printStudents(&S1, 2); //Calls the printStudents function.
system("pause");
return 0;
}
//Function Definitions
//studentData function
Student* studentData(Student &S1)
{
cout << "Student 1" << endl;
cout << "_________" << endl;
cout << "Name: " << S1.Name << endl;
cout << "GPA: " << S1.GPA << endl;
cout << "Major: " << S1.Major << endl;
cout << endl;
if (S1.Major == 0)
{
throw "Bad Major!\n";
}
else
return &S1;
}
Student* changeData(Student &S2) // Changes the data.
{
cout << "Name: " << S2.Name << endl;
cout << "GPA: " << S2.GPA << endl;
cout << "Major: " << S2.Major << endl;
if (S2.Major == 0)
{
throw "Bad Major!\n";
}
else
return &S2;
}
Student getStudent(Student array[], int size) //Function and loop to receive the array and an int representing the number of elements(2).
{
for (int index = 0; index < size; index++)
{
cout << "Please enter students full name: ";
cin.getline(array[index].Name, 30);
cout << "Please enter students GPA: ";
cin >> array[index].GPA;
cout << "Please enter students major: ";
cin >> array[index].Major;
cin.ignore(1);
}
if (array[1].Major == 0 || array[2].Major == 0)
{
throw "Bad Major!\n";
}
else
return array[size];
}
Student printStudents(Student array[], int size)
{
for (int index = 0; index < size; index++)
{
cout << array[index].Name << " " << array[index].GPA << " " << array[index].Major << endl;
return array[size];
}
}