-1

我刚刚将文本文件中的数据读入一维数组。我的“for”语句没有从数组中输出数据。我想输出整个数组只是为了验证所有数据都在那里。但是,当我输出单个单元格时,数据会输出到屏幕上。我究竟做错了什么?提前致谢!

#include <iostream>
#include <fstream>
#include <iomanip>

int main()
{
  const int MAX_CELLS = 500;      
  int count = 0;         
  double Vehicles[MAX_CELLS];   
  ifstream vehicleFile;           
  char type; 
  string license; 
  double charge; 

  vehicleFile.open ("VEHICLE.txt");   

  if (!vehicleFile)            
     cout << "Error opening vehicle file " << endl;

     vehicleFile >> type >> license ;              // priming read


     while (vehicleFile) {                         // while the read was successful

          cout << count << " "  << license << endl;    // FOR DISPLAY ONLY

          vehicleFile >> Vehicles[count];              // read into array

          count++;                                     // increment count

          vehicleFile >> type >> license;              // read next line

     }   

    cout << showpoint << fixed << setprecision(2); 


    for ( count; count < MAX_CELLS; count++) {
          cout << "Array #" << count << "is: ";        // OUTPUT ARRAY 
          cout << Vehicles[count] << endl; 
    }


    cout << Vehicles[8];       // READS DATA IN CELL 


    vehicleFile.close(); 


    system ("pause"); 
    return 0;       
}
4

3 回答 3

1

count需要像这样重置:

for ( count = 0; count < MAX_CELLS; count++) {
      cout << "Array #" << count << "is: ";        // OUTPUT ARRAY 
      cout << Vehicles[count] << endl; 
}

在上一个循环中,您count为每条记录递增,因此当它到达for循环时,它已经被设置为最后一条记录的索引。尽管您真正想要做的是使用新变量并且仅迭代count次数:

for ( int i = 0; i < count ; ++i) {
      cout << "Array #" << i << "is: ";        // OUTPUT ARRAY 
      cout << Vehicles[i] << endl; 
}

您也没有MAX_CELLS在读取数据时进行检查。因此,如果您的文件包含的不仅仅是MAX_CELLS数据,那么您将有未定义的行为。

于 2013-03-14T02:11:37.937 回答
1

count在 while 循环之后仍然存在,因此它将是您的 while 循环完成后的最终值。然后当它进入 for 循环时,它将从该值开始:

考虑一下:

int count = 0
while(count < 10)
    count++

std::cout << "count is: " << count << std::endl;

for (count; count < 15; count++)
   std::cout << "now count is: " << count << std::endl

你的输出将是:

count is: 10
now count is: 11
now count is: 12
now count is: 13
now count is: 14
now count is: 15

您需要在循环中或循环之前重置计数for

于 2013-03-14T02:14:11.477 回答
0

在您的 for 循环中,您不会重新初始化count( count = 0)。

为了让生活更轻松,并避免这些类型的逻辑错误,请尝试:

for ( int i = 0; i < MAX_CELLS; ++i ) {
    cout << "Array #" << i << "is: ";        // OUTPUT ARRAY 
    cout << Vehicles[i] << endl; 
}

目前,它看起来count已经大于或等于MAX_CELLS

于 2013-03-14T02:12:27.530 回答