-1

I just finished reading data from a text file into a single dimension array. My "for" statement is not outputting the data from the array. I want to output the entire array just to verify that all the data is there. However when i output an individual cell, the data goes out to the screen. What am i doing wrong? Thanks in advance!

#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

countwhile ループの後も存続するため、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 に答える