2017-04-26 69 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。现在,无论出于何种原因,你只要就假定这个数组中有三个条目(长度为五?),然后继续并将其转储出去,即使它没有填充。