2017-04-26 9 views
-1

Also im Grunde alle dieses Programm liest die Daten in das Array von Strukturen von student_type und alle print_students Funktionen ist die Daten ausgegeben bekomme ich meist die richtige Ausgabe, aber ich bekomme auch zufällige große Zahlen.Die Datei enthält die folgenden Daten Info und mein Code ist unten, wie repariere ich meine Ausgabe?Wie man die Ausgabe repariert?

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

"Zufällige riesige Zahlen" bedeutet in der Regel "nicht initialisierte Daten", was normalerweise bedeutet, dass Sie Ihre Werte richtig initialisieren, bevor Sie sie verwenden. – tadman

Antwort

0

Es sieht so aus, als ob Sie alle Schülerdaten auf der ersten Iteration der Schleife drucken. Sie sollten warten, bis Sie alle Ihre Daten geladen haben.

Darüber hinaus ist es in C++ wichtig, die Container der Standardbibliothek zu verwenden und C-artige Arrays fester Länge in solchen Situationen zu meiden, in denen Sie aus einer Datei unbekannter Länge einlesen.

, dass dies verwenden:

std::vector<student_type> students; 

Diese lassen sich mit Dingen hinzugefügt werden können, wie push_back auf einem richtig student_type Datensatz zusammengesetzt.

Dann können Sie dies durch Verweis auf jede Funktion übergeben, die es braucht, wie zum Beispiel print_students. Gerade jetzt, aus welchem ​​Grund auch immer, Sie nur annehmen, dass es gibt, dass es drei Einträge in diesem Array (der Länge fünf?) Gibt und gehen Sie voran und dump es aus, auch wenn es nicht aufgefüllt wurde.

Verwandte Themen