2017-05-07 3 views
0

Ich bin ziemlich neu in C++ und habe diese Aufgabe von der Schule zu tun und jetzt bin ich fest, wie ich es nicht zur Arbeit bringen kann, würde einige Hilfe geschätzt werden. Danke im Voraus.Lesen Sie ganze Zahlen aus Textdatei und speichern Sie sie in einem Array

Ich habe eine Textdatei mit ganzen Zahlen wie folgt aus: 8 3 7 1 2 0

Ich brauche Programm zu erstellen, das diese ganzen Zahlen liest und speichert sie in einem Array. Das Programm prüft die Textdatei und zählt, wie viele Ganzzahlen vorhanden sind, und erstellt dementsprechend ein Array mit der erforderlichen Größe. Anschließend füllt es das Array mit Ganzzahlen aus der Datei. Ich habe kam mit so etwas wie dies oben:

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

int main(){ 

    ifstream File("data.txt"); 
    int count; 
    File >> count; 
    int array[count]; 
    for(int i=0; i<count; i++){ 
     File >> array[i]; 
    } 

    cout<<"File contains: "<<count<<" integers"; 
    cout<<"Array of integers taken from the file: "; 

    for(int i=0; i<count; i++){ 
     cout<<array[i]; 
    } 
} 

Aus irgendwelchen Gründen meine count integer keinen Wert, ich habe überprüft und es ist nur eine Null nach Programm und damit meine ganze Code wird nicht funktionieren .

+1

Verwenden Sie 'File.is_open()', um zu sehen, ob Sie die Datei öffnen Datei erfolgreich. – Jiahao

+0

Versuchen Sie zu überprüfen, ob jede E/A-Operation (Öffnen, jede Leseoperation) tatsächlich erfolgreich ist. Auch 'int array [count]', mit 'count' eine Variable ist nicht gültig C++ (wenn dein Compiler es annimmt, handelt es sich um eine Compiler-spezifische Erweiterung). Außerdem enthält die Datei aus dem von Ihnen beschriebenen Beispiel nicht die Anzahl der nachfolgenden Ganzzahlen, die gelesen werden müssen. – Peter

+0

Es wäre hilfreich zu wissen, ob der Rest der Leseoperationen erfolgreich ist. – hvanbrug

Antwort

0

Wenn die Extraktion fehlschlägt, wird Null in den Wert geschrieben und failbit gesetzt. Wenn die Extraktion den Wert zu groß oder zu klein ergibt, um in den Wert zu passen, wird std::numeric_limits<T>::max() oder std::numeric_limits<T>::min() geschrieben und das Failbit-Flag wird gesetzt.

Dies stammt aus der Dokumentation operator>> von std::ifstream. Wie Sie sehen, wenn die Extraktion fehlschlägt, wird die Variable auf 0 gesetzt. Warum ist die Extraktion fehlgeschlagen? Nun, Sie überprüfen nie, ob die Datei geöffnet ist oder nicht, daher ist es möglich, dass die Datei nicht existiert und das Laden fehlgeschlagen ist.

Aber selbst wenn Ihre Datei korrekt geladen wird, scheint es mir nicht, dass das erste Element in der Datei die Menge der Ganzzahlen in der Datei ist. Wenn dies nicht der Fall ist, müssen Sie jede Ganzzahl lesen und in einem dynamischen Array speichern, da Sie die Größe nicht kennen (wie std::vector).

+0

Oh, also ist es so, ich muss dafür Vektoren benutzen, schade, dass ich sie noch nicht studiert habe ... – RookiefromLit

0

Variables Längen-Array existiert nicht un C++. Verwenden Sie eine vector<int>, um die Daten zu speichern.

Btw, können Sie:

System("pwd");//linux 

Arbeitspfad zu überprüfen.

Verwandte Themen