2014-02-19 23 views
0

我试图从文件流中执行一个简单的getline,然后将不同的输入存储到不同的阵列中。使用getline从文件中获取多行并将它们输入到不同的阵列中

输入文件是这样的。

当然销售时间,价格($),数量,价值($),条件2013年10月10日 下午4时57分27秒,5.81,5000,29050.00,LT XT 2013年10月10日4时48分05秒 PM,5.81,62728,364449.68,SX XT二○一三年十月一十日下午四点10分33秒,.00,0,0.00,

注意,前两行是冗余应该被忽略。所有的数据都应该存储在它们各自的数组中,比如time [i],price [i]。

string datefield; 
int count = 0; 
string date[5000]; 
float pricefield; 
float price [5000]; 
int volume[5000]; 
float value[5000]; 
string condition[5000]; 
int i = 0; 

while (!infile.eof()) { 
    count++; 
    getline(infile,datefield); 
    while (count >= 2) { 
     getline(infile,date[i], ','); 
     infile >> price[i] >> volume[i]; 
     i++; 
     break; 
    } 
} 

这里的问题是,没有输入进入volume[i].

+1

第一:['while(!infile.eof())'wrong](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-考虑-错误的)。在假设它有效之前,您从不在这个代码中检查单个提取的有效性。 – WhozCraig

回答

1
  1. 不要把eof()while条件。这是不对的!退房时间:Why is iostream::eof inside a loop condition considered wrong?。要锻炼了,你可以改变

    while (!infile.eof()) { 
        count++; 
        getline(infile,datefield); 
        ... 
    

    while (getline(infile,datefield)) { 
        count++; 
        ... 
    
  2. 你应该在数据读取步骤非常小心。对于",.00,0,.00,",由于其中没有空格,因此>> price[i] >> volume[i]将尝试将所有这些内容读取到price[i]。没有内容将被读入volume[i]。为了解决这个问题,你可以首先阅读这部分到string,然后通过拆分从中读取数据。或者将所有','替换为空格,然后将其放入std::istringstream,然后可以正确使用>> price[i] >> volume[i]

+0

谢谢。我现在已经开始工作了。 –

相关问题