C++ Datei schreiben/Lesen
Ich versuche, ein array zu erstellen, schreiben, array in die Datei und als Sie anzuzeigen. Es scheint zu funktionieren aber ich bekommen nur einen Teil der Ausgabe (die ersten 3 Elemente) oder bekomme ich die Werte über die Grenzen.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int arr[20];
int i;
for (i = 0; i < 5; i++)
{
cout << "Enter the value to the array: " << endl;
cin >> arr[i];
}
ofstream fl("numbers.txt");
if (!fl)
{
cout << "file could not be open for writing ! " <<endl;
}
for (i = 0; i < arr[i]; i++)
{
fl<<arr[i]<<endl;
}
fl.close();
ifstream file("numbers.txt");
if(!file)
{
cout << "Error reading from file ! " << endl;
}
while (!file.eof())
{
std::string inp;
getline(file,inp);
cout << inp << endl;
}
file.close();
return 0;
}
- Das sieht falsch aus:
for(i=0;i<arr[i];i++)
- Die
while (!file.eof())
ist auch nicht korrekt. Die while-Schleife sollte die Prüfung auf diegetline()
Ergebnis, aber Sie wird wahrscheinlich nicht den Unterschied bemerken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
seine wie hmjd sagte
falsch aussieht
sollte es so Aussehen
Die Abbruch-Bedingung in der
for
Schleife ist falsch:Wenn der Benutzer die folgenden 5
int
s:den
for
Schleife beenden bei der zweitenint
, die0
als1 < 0
(wasi<arr[i]
entspräche) istfalse
. Der code hat das Potenzial, den Zugang über die Grenzen des Arrays, der für die Eingabe:den
for
- Schleife iteriert über die ersten 5 Elemente und starten Sie die Bearbeitung unitialised Werte im arrayarr
wie es ist nicht initialisiert worden:führen könnten out-of-bounds Zugriff auf das array, wenn die Elemente in
arr
geschehen, immer größer zu sein, alsi
.Eine einfache Lösung:
Andere Punkte:
überprüfen Sie immer das Ergebnis von I/O-Operationen zu gewährleisten, enthalten die Variablen gültige Werte:
den
for
loop-speichern müssen die Anzahl derint
s Lesen in derarr
, so dass der Rest des Codes nur Prozesse Werte, die vom Benutzer zur Verfügung gestellt. Eine alternative zur Verwendung von einem array mit fester Größe und eine variable, um anzuzeigen, die Anzahl der besiedelten Elemente ist die Verwendung einerstd::vector<int>
enthalten würde nur gültigint
s (und kann abgefragt werden, für seinesize()
oder iteriert über Iteratoren).while (!file.eof())
ist nicht korrekt, da das Dateiende-flag wird gesetzt, nur einmal gelesen, versucht zu Lesen über das Ende der Datei. Überprüfen Sie das Ergebnis von I/O-Operationen sofort:Versuchen Sie dies:
[BEARBEITET]
Ich würde das array initialisiert mit 0 wie diese: int arr[20] = {0}; In diesem Fall können Sie verwenden, zum Beispiel:
Es ist falsch, weil es comapres mit dem Inhalt des array ,prüft es nicht die Größe des Arrays .