2017-04-26 67 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; 

這可以被添加到之類的東西push_back以正確的方式組成student_type記錄。

然後您可以通過引用任何需要它的函數來傳遞它,例如print_students。現在,無論出於何種原因,你只要就假定這個數組中有三個條目(長度爲五?),然後繼續並將其轉儲出去,即使它沒有填充。