PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C/C++] aus txt datei lesen und als int speichern



knallerbse
30-03-2004, 18:27
hi
ich will aus einer textdatei (in der ersten zeile steht 1) auslesen und in eine variable speichern damit ich damit weiterrechnen kann... kann ihc das mit streams machen oder wie geht das?

wraith
30-03-2004, 18:41
#include <fstream>
#include <iostream>

int main()
{
std::ifstream file("datei");
int zahl;

if(file >> zahl)
std::cout << zahl << std::endl;
}

knallerbse
30-03-2004, 19:08
hmm.. und wie rechne ich jez damit?

wraith
30-03-2004, 19:30
Original geschrieben von knallerbse
hmm.. und wie rechne ich jez damit?
Hmm?
Du hast jetzt in der Variablen zahl die 1 aus deiner Datei drinstehen.
Jetzt kannst du damit weiterrechnen.

knallerbse
30-03-2004, 19:37
#include <fstream>
#include <iostream>

int main()
{
std::ifstream file("datei");
int zahl;

if(file >> zahl)
std::cout << zahl << std::endl;

// jez sollte er doch eigentlich 1 ausgeben oder?

cout << zahl << endl;

// tut er aber net ;)

}

er gibt gar nix aus. er liest den wert ein und beendet das programm

peschmae
30-03-2004, 19:41
Tut er ja wohl. Allerdings darfst du auch beim zweiten mal das std:: nicht weglassen.

Oder hast du evtl. die "datei" nicht mit einem newline beendet? Vielleicht brauchts das - k.A.

MfG Peschmä

wraith
30-03-2004, 19:44
Heißt deine Datei auch datei?
Steht da auch eine 1 am Anfang drin?

Dann füg' nochmal Fehlerbeschreibung hinzu.


#include <fstream>
#include <iostream>

int main()
{
std::ifstream file("datei");
int zahl;

if(file >> zahl)
std::cout << zahl << std::endl;
else
std::cout << "Error reading" << std::endl;
}

knallerbse
30-03-2004, 19:50
also
ich compilier und fuehre aus. der code is wie oben nur halt mit test.txt

armin@linux:/data/> ./a.out
armin@linux:/data/>

es steht eine 1 in der text.txt drin udn die is auhc mit einer newline abgeschlossen

peschmae
30-03-2004, 20:21
im Sample ist die Rede von "datei" - du hast das doch nicht etwa nicht abgeändert? :rolleyes:

MfG Peschmä

knallerbse
31-03-2004, 13:48
denkst du ich bin net ganz schmackes? natuerlich hab ich des geaentert!

peschmae
31-03-2004, 14:24
Original geschrieben von knallerbse
denkst du ich bin net ganz schmackes? natuerlich hab ich des geaentert!

Ja denke ich ;)

Nein. Im Ernst. Die Frage war n bisschen (so ne Stunde verspätet) - der Tab war wohl irgendwo in meinem Browser. Nachdem du das so bestätigt hast glaube ich dir das natürlich. :)

Aber: Bei mir gehts (muss es auch). Also liegt der Fehler entweder bei dir oder deinem System.

1) Gehen andere C++ Programme die du kompilierst?
2) Was is mit einem Debugger? GDB oder so sollte zumindest Hinweise geben, dass da ein Problem is.

MfG Peschmä

knallerbse
31-03-2004, 15:22
1. es geht alles was ich compilier
2. es gibt ja kein problem in dem sinne dass ichs net ausfuehren koennt oder so. ihc kann nur damit net weiterarbeiten weil wenn ich eine ausgabe der variable machen passiert nix. er gibt sie einfach net aus. ich glaub du hast mich falsch verstanden oder ich hab mich falsch ausgedrueckt (kommt ja des gleiche dabei raus ;) )

peschmae
31-03-2004, 16:28
Und wenn du die Variable auf 0 initialisierst wird auch 0 ausgegeben?

Damit wäre mal schon sicher das lesen Schuld.

MfG Peschmä

knallerbse
31-03-2004, 17:04
ok. ich habs zum laufen gebracht. er gibt mir jez die 1 aus die in der txt datei steht... gut

jez will ich in die txt datei z.b. x*x eingeben und der soll mir im programm die variable x*x erkennen und ersetzen.
siehe meinen falschen code hier:
die x in der text.txt soll der x in der schleife entsprechen
.
for(x=1;x<10;x++){
int y;
y = zahl;
//sozusagen y = x*x
//macht er aber net :)

cout << y << endl;
}
.
hier sollte er dann machen
1
4
9
16
25
36
49
64
81

wie bekomm ich die char dazu ne int zu werden?

Boron
31-03-2004, 17:21
wie bekomm ich die char dazu ne int zu werden? [/B]So:
char blub = 'c';
...
int gaga = (int)blub; // int gaga = blub; ginge auch, dann wird implizit ein Cast gemachtUnd was dein x*x betrifft:
Du hast in der Textdatei wirklich "x*x" stehen? Du müsstest also also einen Parster schreiben, der das Zeug ausliest und erkennt welche mathematische Operation dahinter steckt (in diesem Fall die Multiplikation zweier Zahlen). Das ist quasi schon die Vorstufe zu einem eigenen kleine Compiler :D. Viel Spass.

Und zu deiner Schleife. Wenn du willst, dass die Qudratzahlen, beginnend ab der Zahl aus der Textdatei ausgegeben werden, dann so:
int zahl;
// wie schon gelesen zahl aus Datei lesen
...
int dummy;
for( zahl; zahl<10; zahl++)
{
dummy = zahl*zahl;
cout << zahl << endl;
}Beachte, dass die Variable zahl dann verändert wurde. Wenndies nicht erwünscht ist, dann einfach zahl in eine temporäre Variable kopieren.

peschmae
31-03-2004, 17:45
Original geschrieben von Boron

Du hast in der Textdatei wirklich "x*x" stehen? Du müsstest also also einen Parster schreiben, der das Zeug ausliest und erkennt welche mathematische Operation dahinter steckt (in diesem Fall die Multiplikation zweier Zahlen). Das ist quasi schon die Vorstufe zu einem eigenen kleine Compiler :D. Viel Spass.


Im Stroustroup Buch "The C++ Programming Language" hats ein nettes Beispielprogramm das genau das macht mit Lexer, Parser und Heckspoiler. :p

MfG Peschmä

knallerbse
31-03-2004, 18:42
leider hab ich dieses buch nicht. :(

wraith
31-03-2004, 18:50
Original geschrieben von knallerbse
leider hab ich dieses buch nicht. :(
Aber den Code gibt es online
http://www.research.att.com/~bs/3rd_code.html

peschmae
31-03-2004, 20:55
Wusste ich gar nicht. Man lernt nie aus :)

MfG Peschmä

P.S. wahnsinnig überheblich der Satz meinerseits in Bezug auf C/C++ :D