2009-05-04 116 views
1

我有像一条线的文本文件:输入到阵列

James Dean   10 Automotive  27010.43 

,我需要读取该文件,并把上述各4的成阵列。

char nameArray[MAX][NAME_MAX]; 
int yearArray[MAX]; 
char departmentArray[MAX][DEP_MAX]; 
double payArray[MAX]; 


while(i < MAX && infile) { 

     infile.getline(nameArray[i], 20); 
     infile >> yearArray[i]; 
     infile.getline(departmentArray[i], 15); 
     infile >> payArray[i]; 

     cout << nameArray[i] << " " << yearArray[i] << " " << departmentArray[i] << " " << fixed << setprecision(2) << payArray[i] << endl; 
     i++; 
    } 

代码是刚切下来给你什么,我试图做一个想法,但是当我运行它,我得到这样的:

James Dean   -858993460 -92559631349317830000000000000000000000000000 
000000000000000000.00 

感谢您的帮助。

====编辑========================================= =

我从getline变成了,谢谢你。我必须使用get而不是>>,因为我阅读的部分内容不仅仅是“James Dean”,他们长达20个字符......例如:“William K. Woodward”是另一个。因此,如果我只是使用get,那么它读取第一行的罚款,但是然后我得到第二行相同的文本。

下面是代码:

infile.get(nameArray[i], 20); 
    infile >> yearArray[i]; 
    infile.get(departmentArray[i], 15); 
    infile >> payArray[i]; 
+0

您应该使用一些分隔符,还是使用制表符?如果您使用空格,那么如果您允许姓名或部门的号码,则会导致问题。 – schnaader 2009-05-04 16:02:40

回答

2

getline功能获取输入流和写为字符串。所以,两行getline调用读取两行。您的输入机制被破坏。要么使用getline,要么使用流提取操作符(即>>),但不能同时使用两者。

如果您打算使用getline,则需要将字符串(实际上是一行输入)解析为tokes,然后将它们存储在适当类型的数组中。第二个和第四个标记是数字,因此您需要将它们从字符串转换为intdouble

operator >>方法:

string name, surname; 
int year; 
double pay; 
while (infile) { 
    infile >> name >> surname >> year >> department >> pay; 
    namearray[ i ] = name + " " + surname; 
    // ... 
    payarray[ i ] = pay; 
    ++i; 
} 

getline方法:

string line; 
while (getline(infile, line)) { 
    parse(line, tokens); 
    namearray[ i ] = token[ 0 ] + " " + token[ 1 ]; 
    // ... 
    payarray[ i ] = strTodouble(token[ 4 ]); 
    ++i; 
} 

// parse definition 
void parse(string line, vector<string>& token) { 
    // roll your own 
} 

double strToDouble(string s) { 
    // ... 
} 
0

我没有看到你定义INFILE,但我会认为这是一个ifile的。在这种情况下,你应该像使用cin一样使用它来获得输入。

为什么要做getline()? 该函数仅在'\ n'字符处或EOF字符处停止。所以这意味着,你开始读取行结束后的int,一些随机数据。

如果我错了,请纠正我,但在数字(10)之前,第一个字符串(James Dean)中是否有20或19个字符?