2017-04-26 12 views
-1

基本的には、このプログラムはすべてstudent_typeの構造​​体の配列にデータを読み込み、すべてのprint_students関数はデータを出力しますが、大部分は正しい出力が得られますが、ランダムな巨大な数値も得られます。ファイルデータには、情報と私のコードは私の出力を修正する方法は以下のですか?出力を修正するには?

Smith 
John 
123456 
3.4 
J 
1750.4 
302 
Fairmont St NW 
Washington 
DC 
20059 
Smitty 
Frank 
78910 
2.7 
F 
1940.7 
302 
Sixth St SW 
Washington 
DC 
20059 
#include <iostream> 
#include <string> 
#include <fstream> 
using namespace std; 
struct Address_type 

{ 
    int street_no; 
    string street_name; 
    string city; 
    string state; 
    int zip; 
}; 
struct student_type 
{ 
    string lname; 
    string fname; 
    int ID; 
    float GPA; 
    char classification; 
    float account_balance; 
    Address_type student_address; 
}; 
void print_students(student_type[]); // prototypein 
int main() 
{ 
    ifstream myfile; 
    student_type students[5]; 
    myfile.open("infile.txt"); 
    string name1, name2, name3; 

    for (int i = 0; i < 2; i++) { 
     myfile >> students[i].lname; 
     myfile >> students[i].fname; 
     myfile >> students[i].ID; 
     myfile >> students[i].GPA; 
     myfile >> students[i].classification; 
     myfile >> students[i].account_balance; 
     myfile >> students[i].student_address.street_no; 
     myfile >> name1 >> name2 >> name3; 
     students[i].student_address.street_name = name1 + " " + name2 + " " + name3; 
     myfile >> students[i].student_address.city; 
     myfile >> students[i].student_address.state; 
     myfile >> students[i].student_address.zip; 
     print_students(students); 
    } 
    myfile.close(); 
} 
void print_students(student_type students[]) 
{ 
    for (int i = 0; i < 2; i++) { 
     cout << students[i].lname << endl;; 
     cout<< students[i].fname<<endl; 
     cout<< students[i].ID<<endl; 
     cout<< students[i].GPA<<endl; 
     cout<< students[i].classification<<endl; 
     cout<< students[i].account_balance<<endl; 
     cout<< students[i].student_address.street_no<<endl; 
     cout<<students[i].student_address.street_name<<endl; 
     cout << students[i].student_address.city << endl; 
     cout << students[i].student_address.state << endl; 
     cout << students[i].student_address.zip << endl; 
    } 
} 
+0

「ランダムな巨大数」は、通常、「初期化されていないデータ」を意味し、通常、「使用前に値を正しく初期化する」ことを意味します。 – tadman

答えて

0

ループの最初の反復ですべての生徒データを印刷しているようです。あなたはすべてのデータを読み込むまで待たなければなりません。

さらに、C++では、標準ライブラリコンテナを使用することが重要です。長さが不明なファイルからこのような状況でCスタイルの固定長配列を使用しないようにしてください。ある

はこれを使用します。

std::vector<student_type> students; 

これが適切に構成さstudent_type記録にpush_backのようなものを持つに追加することができます。

次に、それを必要とする任意の関数(例えば、print_studentsなど)への参照によって渡すことができます。どんな理由であれ、ちょうどと仮定します。その配列に3つのエントリ(長さは5か?)があり、それが入力されていなくても先に進んでダンプします。

関連する問題