2016-03-08 135 views
-2

我的代码是用于从文本文件中读取数据的,我希望此代码从文本文件逐行读取数据,目前它只是读取我的文本文件的第一行,而不会到下一行。 “学生”是文本文件。和文本文件包含下面给定的数据,从文件中读取多行文件

[ALI,DBA,BITF11M001,3.0,3.57

ASIF,DBA,BITF11M002,3.5,3.9

ALI,OOP,BITF11M001,3.5,3.57

ASIF,OOAD,BITF11M002,3.7,3.9

ALI,OOAD,BITF11M001,3.5,3.57

ASIF,OOP,BITF11M002,4.0,3.9

ALI,DSA,BITF11M001,3.0,3.57

ASIF,DSA,BITF11M002,4.0,3.9 ]

#include <iostream> 
#include <fstream> 
#include <string> 
#include <cstring> 

using namespace std; 

struct student_attribute 

{ 
    string name [20]; 
    string course [20]; 
    string roll_no[20]; 
    float GPA [20]; 
    float CGPA [20]; 

}; 

int main() 

{ 
    int i =0; 

    int count ; 

    student_attribute data; 

    ifstream myfile ("Students.txt"); 


    string line; 

     while (myfile) 

    { 
     getline(myfile, data.name[i], ','); 

     getline(myfile, data.course[i], ','); 

     getline(myfile, data.roll_no[i], ','); 

     myfile >> data.GPA[i]; 

     myfile >> data.CGPA[i]; 

     count++; 
    } 


    myfile.close(); 

    for(int index = 0; index < count; index++) 

    { 
     cout << data.name[index] << " "; 
    } 

    for(int index = 0; index < count; index++) 

    { 
     cout << data.course[index] << " "; 
    } 

    for(int index = 0; index < count; index++) 

    { 
     cout << data.roll_no[index] << " "; 
    } 

     for(int index = 0; index < count; index++) 

    { 
     cout << data.GPA[index] ; 
    } 

    return 0; 
} 
+0

''''总是'0' – Hacketo

+0

你永远不会改变你的循环中的'i'的值,所以你把所有的东西都读入同一个数组元素 – Galik

+0

'拥有'student_attribute'数组比通常情况下更有意义'student_attribute',每个成员都是一个数组。 – crashmstr

回答

1
myfile >> data.GPA[i]; 

这将工作,从输入读出号码3.0。下一个未读字符是','

myfile >> data.CGPA[i]; 

这是行不通的,因为','不是float。匹配失败,失败位被设置为myfile,while (myfile)false,循环结束。

你的代码还有其他一些问题,其中一些已经被注释过了,但这就是为什么只有(部分)第一行被实际读取的原因。