• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

problem bei einem c program >file management

malloc

Newbie
so nun bring ich mir doch noch c/c++ bei :D

ich hab mich die nacht mal drangesetzt und komm ganz gut voran... aber nun steck ich fest (vieleicht bin ich auch nur totmüde und komm ned weiter also habt erbarmen,,,)

das problem ist folgendes...

mein program soll
1. eine datei aufmachen und daten daraus auslesen
und zwar im folgenden format
3 + 4
11 -9
22 * 2
11 / 2
ausgelesen wird bis zum ende der Datei

das Program erstellt eine neue datei wo es die rechnungen wieder ausgiebt und zwar in folgendem format

3 + 4 = 7
11 - 9 = 2
etc...

dazu weise ich den beiden zahlen mit fscanf int werte zu und dem opperand einen string...
allerdings weiss ich nicht wie ich das prog dazu bringen soll diesen string auch zu verwenden...

quelcode hängt an

Code:
#include <stdio.h>
#include <stdlib.h>
main() {
FILE *stream;
FILE *res;
int f;
int f2;
int ergebniss;
ergebniss = 0;
char str[80];
stream = fopen("math.txt","r");
res = fopen("res.txt","w");
while(!feof(stream)) {
fscanf (stream, "%i", &f);
fscanf (stream, "%s", str);
fscanf (stream, "%i", &f2);
fprintf (res,"%i ", f);
fprintf (res,"%s ", str);
fprintf (res,"%i =", f2);


}
fclose(stream);
fclose(res);

}
 

TeXpert

Guru
erst mal :) gewöhn Dir ganz schnell an, Quelltext einzurücken und zu kommentieren, sonst wird das zu Quältext.

dann: wir hatten vor ein paar Tagen hier einen "Taschenrechner" in C++ im Prinzip kannst Du den verwenden, d.h. entsprechend der Zeichenkette.

jetzt zum Text, der Operand ist nur ein Zeichen, d.h. hier ist ein char-Array evtl. etwas viel :)


dann
Code:
fscanf (stream, "%s", str);
hier wird bis zum nächsten nicht Zeichen gelesen -> d.h. in Deinem Beispiel wird die "11 -9" zu 2 tokens 11 und -9 als Op sowie die 22 aus der nächsten Zeile gelesen.

entweder sicherstellen, dass immer zahl BLANK Op BLANK zahl in der Datei steht, dann kann man auch mit einem char als Operator arbeiten. oder zeichenweise lesen und manuell auseinanderpflücken.

dann fscanf und fprintf könnene mit variablen Argumentlisten umgehen, d.h. bei fixer math.txt-STruktur:

Code:
fscanf (stream, "%i %c %i", &f, &op, &f2);

analog auch bei der Ausgabe.

das Ergebnis musst Du dann mit einer Fallunterscheidung je nach Operator berechen. und denk bei der Ausgabe dran, am Ende einen Zeilenumbruch zu machen ;)
 
OP
M

malloc

Newbie
hehe
stimmt könnt n bischen besser aufgeraumt sein.

ne wie gesagt ich schau mir das erst seit n paar tagen an...

die char array war aber echt unnötig^^ naja hab im halbschalf n´bischen von ner man page abgetippt un da wars halt n array

ich bin mittlerweilen bei swich-cases angekommen und denke das diese doch eigentlich vortrefflich dafür geignet sein sollten?

kann ich einfach mit swich(op) die einzelnen cases durchgehen?

naja mein gröstes prob sind wohl die platzhalter für die vars...
irgendwie krieg ich immer syntax errors hin :D
 
Oben