I/O von Daten (double) aus/in .txt-files - Anfängerlevel
-
Hallo Zusammen,
ich bin ein C++ Laie und muss kurzfristig eine .exe schreiben, dass auf eine Datei BGinput zugreift, die Daten (es sind Zeilenweise angeordnet 8 double - Variablen) einliest, berechnet und anschließend in einer anderen .txt ausgibt.
Zum Einlesen habe ich folgendes geschrieben, irgendwie klappts ned, kriege immer eine Fehlermeldung (s.u.)
int main(int argc, char* argv[]) {
double n_1;
double n_sd;
double n_2d;
double P_sh;
double d_max;
double d_1i;
double l_fwd;
double l_aft;ifstream inFile;
inFile.open("GBinput.txt");
if (inFile.fail()) {
cerr << "unable to open file input.dat for reading" << endl;
exit(1);
}
n_1=atof(argv[0]);
n_sd=atof(argv[1]);
n_2d=atof(argv[2]);
P_sh=atof(argv[3]);
d_max=atof(argv[4]);
d_1i=atof(argv[5]);
l_fwd=atof(argv[6]);
l_aft=atof(argv[7]);inFile.close();
Als Ausgabe habe ich folgendes geschrieben:
ofstream outFile;
outFile.open("GBresults.txt");
outFile << d_gb << "// gearbox diameter [m] \n\n";
outFile << b_gb << "// gearbox width [m] \n\n";
outFile << m_sh << "// drive shaft weight [kg] \n\n";
outFile << m_psh1 << "// Fwd propfan shaft weight [kg] \n\n";
outFile << m_psh2 << "// Aft propfan shaft weight [kg] \n\n";
outFile << m_ges << "// Gesamtgewicht Gearbox + Shafts [kg] \n\n";
outFile.close();Ich kriege immer die folgende Fehlermeldung:
"Gearbox.exe": "C:\Windows\System32\ntdll.dll" geladen, Cannot find or open the PDB file
"Gearbox.exe": "C:\Windows\System32\kernel32.dll" geladen, Cannot find or open the PDB file
"Gearbox.exe": "C:\Windows\System32\KernelBase.dll" geladen, Cannot find or open the PDB fileKann mir bitte einer weiterhelfen. Ich weiss nicht weiter.
Vielen Dank für Eure Bemühungen / Hilfen!
Euer C++ - Laie,
GRK
-
Erstens: Wozu öffnest du überhaupt die Datei, wenn du dann doch die Werte aus der Kommandzeile (argv) holst? (abgesehen davon ist zumindest argv[0] ziemlich sicher kein double-Wert)
Zweitens: Die Meldungen, die du dort gepostet hast, sind harmlos. Das Konsolenfenster hat sich vermutlich kommentarlos beendet, nachdem es die Meldung über die fehlende Datei gebracht hat.
-
Das sind nicht die richtigen Fehlermeldungen.
Dein Programm öffnet zwar die Datei "GBinput.txt", aber liest nicht aus ihr. Weißt du überhaupt wozu argc/argv gut sind?PS:
Wir haben hier C/C++ Tags.Probier mal
int main() { ifstream infile("GBinput.txt"); vector<double> buf(8); for (size_t i = 0; i < 8; ++i) infile >> buf[i]; // Berechnungen ofstream outfile("GBresults.txt"); // Ausgabe }Fehlerbehandlung natürlich noch einbauen.
-
Hallo cooky451,
dein Beispiel mit vector<double> buf (8) kriege ich nicht zum laufen.
Ich habe #include <vector> ergänzt. Habe die Pfade der Dateien sichergestellt. Aber das Programm will die Daten nicht lesen. (habe dies überprüft).
Also ganz konkret: Meine textdatei schaut so aus:
Wert 1
Wert 2
Wert 3
...
(alles double-Werte; Zeilenweise angeordnet)Warum liest mir das Programm die Daten nicht ein. Muss die Datei nicht vielleicht doch erst geöffnet werden?
Vielen Dank für die Hilfe!
-
GRK schrieb:
Aber das Programm will die Daten nicht lesen. (habe dies überprüft).
Und wie?
-
ich habe gleich nach
int main()
{
ifstream infile("GBinput.txt");
vector<double> buf(8);
for (size_t i = 0; i < 8; ++i)
infile >> buf[i];eine ausgabe machen lassen mittels cout << buf[z.B. 3]
-
Führ dies hier mal aus:
#include <vector> #include <fstream> #include <iostream> using namespace std; int main() { ifstream infile("GBinput.txt"); if (infile) { vector<double> buf(8); for (size_t i = 0; i < 8; ++i) { infile >> buf[i]; if (infile) cout << "Erfolgreich gelesen: " << buf[i] << '\n'; else { cout << "Fehler beim Lesen\n"; break; } } } else cout << "Fehler beim Öffnen\n"; }
-
Danke seppj, du Fuchs!
Ordner waren im überraschend falschen Verzeichnis.
Jetzt noch eine letzte Frage,
das einlesen funktioniert jetzt. Das Auslesen aber nicht. Hab ich es geschafft in den 2 folgenden Zeilen was falsch zu machen oder muss man irgendwo nachschauen, dass der Pfad der einzulesenden Datei nicht gleich ist dem der auszulesenden?
ofstream outFile ("GBresults.txt");
outFile << variable << "bisserl Tesxt \n\n";Danke schon mal für die tatkräftige Unterstzützung!
-
Auch das hat sich geklärt!
Besten Dank für Euer aller Hilfe!