2 integer Zahlen von einer Datei lesen

BaYan

Mitglied
hallo zusammen,

also ein einfaches Problem, aber ich kann es nicht lösen :( . Also ich will folgende Zeile lesen

2 90

und zwar soll 2 zur int inhalt_1, und 90 zur int inhalt_2, zugewiesen werden.

Wenn ich mit

fscanf(quelle, "%d", &inhalt_1);
fscanf(quelle, "%d", &inhalt_2);

hinschreibe, bekomme ich Laufzeitfehler. Er schreibt die 2 in inhalt_1 aber bevor er 90 in inhalt_2 reinschreibt, bericht das programm ab.
Wie könnte ich dieses Problem elegant lösen?

Gruß
 
Hi.

Also meiner bescheidenen Meinung nach sollte das eigentlich funktionieren. Bist du sicher das wirklich "2 90" in der Datei drin steht?

Ansonsten kannst du es auch mal vereinfachen:
Code:
fscanf(quelle, "%d %d", &var1, &var2);

Gruß
 
Moin moin,

kann es sein, das er statt der 90 dein SPACE ausliest und dann nen Fehler bekommt?
Bei dem Vorschlag von deepthroat ist das SPACE enthalten...Und wenn man sich an die Formatierung in der Datei hält, dann klappt das auch mit deinem Vorschlag:)

Gruss Michael
 
Hi.

Also das tut eigentlich nichts zur Sache da scanf Whitespaces überliest wenn es Zahlen einlesen soll. Da können beliebig viele Tabs, Newlines bzw. Spaces zwischen den Zahlen sein und es ist egal ob man das mit zwei Aufrufen macht oder nur einem.

Evtl. stimmt aber etwas mit den Variablen nicht. Wie sind die denn alle deklariert?

Gruß
 
Hallo zusammen,

also die Variablen sind folgendermaßen deklariert:

int inhalt_1, inhalt2;
FILE *quelle;

in der Datei steht z.B in Zeile 1
2 90

Es klappt irgentwie nicht. Er schreibt die 2 in inhalt_1 rein und wenn er inhalt_2 ausführen muss hört er auf.

wenn ich aber in der Datei

2 hello

habe, macht er es richtig. hello weise ich dann einem string zu.

Ich habe schon mit fseek() rumprobiert, mit rewind() ... Aber es klappt irgentwie nicht. :(
 
Kannst du die Datei spaßeshalber mal anhängen? Das würde ich gerne mal selbst ausprobieren.

/edit: Und ein komplettes Beispielprogramm wäre auch nicht schlecht. So einzeln betrachtet sollte das alles funktionieren.
 
Aslo mein Code sieht wie folgt aus:

#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <io.h>

void getsym();
void ausgabe();

char str[STRMAX];
char id[STRMAX];

FILE *source;
int symbol=0,i=0, num=0;

void getsym()
/* read next symbol (token) from token file */
{
fscanf(source, "%d", &symbol);

if (symbol == 1)
{
fscanf(source, "%s", id);
}
else if (symbol == 2)
{
fscanf(source, "%d" ,&num);
}
else if (symbol == 49)
{
fgets(str, STRMAX, source); //die strmax zeichen gelesen
}
ausgabe();
}

void ausgabe()
{
if(symbol == IDENT)
{
printf("%d ",symbol);
printf("%s",id);
printf("\n");
}

else if(symbol == NUMBER)
{
printf("%d ",symbol);
printf("%s",num);
printf("\n");
}

else if(symbol == STRING)
{
printf("%d ", symbol);
printf("%s",str);
printf("\n");
}

else
printf("%d\n", symbol);

}

int main()
{
if ((source = fopen("test.zlg", "r")) == NULL) //hier wird die Datei sname zum lesen geöffnet
{ //wenn er leer ist, dann wird gibt es eine Fehlermeldung
fprintf(stderr, "Cannot open source file %s\n", tname);
return 0;
}

for(i=0; i<4;i++)
getsym();
return 0;
}

Text-Datei sieht wie folgt aus:

1 zeichnen
49 m
2 90
49 hello
 
Bitte poste doch mal ein komplettes Beispielprogramm (verändere das Originalprogramm so, das es in eine Datei paßt, nicht zu lang ist und vor allem zu kompilieren ist!).

Du kannst übrigens auch Dateien anhängen. Und bitte verwende doch die Code Tags wenn du Quelltext postest.

Gruß
 
Zurück