2017-10-25 3 views
0

Ich arbeite an einem Projekt für meine CS 1-Klasse, wo wir eine Funktion machen müssen, die Daten aus einer Datei in ein Array liest. Wenn es jedoch ausgeführt wird, liest es nur alle anderen Datenzeilen ein.Loop überspringt Zeilen beim Lesen von Daten aus einer Datei in Array C++

Die Datei enthält 22 3 14 8 12 und die Ausgabe erhalte ich: 3 8 12

Jede Hilfe ist sehr geschätzt. Tut mir leid, wenn das schon beantwortet wurde, ich konnte es nicht finden.

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 

int readin(); 

int main() { 
    readin(); 
    return 0; 
} 

int readin(){ 
    ifstream inFile; 
    int n = 0; 
    int arr[200]; 

    inFile.open("data.txt"); 

    while(inFile >> arr[n]){ 
    inFile >> arr[n]; 
    n++; 
    } 

    inFile.close(); 

    for(int i = 0; i < n; i++){ 
    cout << arr[i] << " " << endl; 
    } 
} 
+0

'inFile.open' nicht' File'. – Raindrop7

+0

'readin()' muss einen Wert zurückgeben. – Raindrop7

Antwort

1

Der Grund dafür ist, dass Sie aus Ihrem Datei-Stream in Ihrer bedingten Abfrage lesen gerade:

while(inFile >> arr[n]) // reads the first element in the file 

und dann wieder zu lesen und diesen Wert innerhalb der Schleife Umschreiben:

{ 
    inFile >> arr[n]; // reads the next element in the file, puts it in the same place 
    n++; 
} 

Nur tun:

while(inFile >> arr[n]) n++; 
1

Sie können einfach mögen es dies:

while(inFile >> arr[n]){ 
    n++; 
} 

Aber was, wenn die Anzahl der Werte in der Datei als die Größe Array größer ist? Dann stehen Sie vor einem undefined behavior.

  • Ich empfehle vectors mit:

    std::vector<int> vecInt; 
    int value; 
    
    while(inFile >> value) 
        vecInt.push_back(value); 
    
    for(int i(0); i < vecInt.size(); i++) 
        std::cout << vecInt[i] << std::endl; 
    
Verwandte Themen