zahlen vom Datei lesen



  • 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ß



  • quelle muss ein FILE* sein. was ist quelle?

    scanf ist "problematisch": es laesst \n in der eingabe zurueck. manchmal moechte man das, aber beim einlesen von tastatureingaben oder zeilenweise aus dateien eher nicht. deshalb nach jedem scanf dieses:

    int c; while ((c = getchar()) != EOF && c != '\n');
    

    es liest den rest der zeile (NL inklusive).
    EOF bedeutet End Of File.

    alternative zu scanf:
    fgets() und dann strtol/strtof/strtod



  • die beiden fscanf()-zeilen sind völlig in ordnung. die einzige erklärung, die mir einfällt, dafür, daß das programm die erste zeile noch einwandfrei ausführt, bei der zweiten aber abbricht, ist, daß &inhalt_2 auf geschützten speicher zeigt. wie ist inhalt_2 denn deklariert? was kommt genau für eine fehlermeldung?



  • Hallo zusammen,

    also so sind die Variablen deklariert:

    FILE *quelle;
    int inhalt_1, inhalt_2;

    2 und 90 sind Zahlen in der Datei.

    Als Fehlermeldung kommt keine konkrete Fehler raus. Nur wenn er 2 zur inhalt_1 zugewiesen hat, hört er auf weiter zu lesen! Komisch.

    @rackwitz
    Was willst du mit der folgenden Anweisungen?

    int c; while ((c = getchar()) != EOF && c != '\n');

    ich will nicht die ganze Zeile zu einer Variable zuweisen, sonder getrennt!
    Bei
    2 90

    inhalt_1=2;
    inhalt_2=90;



  • Wenn die beiden Zahlen in einer Zeile stehen, ist c.rackwitz' Code auch eher kontraproduktiv. Ansonsten könntest du mal zwischen und nach den beiden Aufrufen überprüfen, ob dein FILE noch offen ist (feof).

    (oder, wenn alles nichts hilft, lies die komplette Zeile in ein char-Array ein und verarbeite sie von dort aus mit sscanf weiter)



  • @OP: poste doch mal diese datei, die du einliest. dann sehen wir weiter.
    der code, den ich dargestellt habe, liest nichts ein, er verwirft den rest der aktuellen zeile, der hoechstwahrscheinlich nur noch aus einem zeilenumbruch besteht, an dem sich alle scanf() verschlucken. reicht das als erklaerung?



  • schwachsinn crackwitz. wenn in ner datei folgendes steht:

    1
    4
    5 7 8
    9

    kannst du das locker mit einem fscanf("%i",..) nach dem nächsten einlesen. und das geht genauso, wenn du die zahlen, zeilenumbrüche und leerzeichen auf der tastatur eingibst und dann mit scanf("%i",..) liest.



  • Genau das ist mein problem. wenn z.B

    2 hallo

    in einer Zeile steht, dann macht er das. 2 scanne ich mit int und hallo mit string.

    Aber wenn ich 2 integer zahlen z.B

    2 90

    habe, macht er das nicht. Ergintwie sehr seltsam 😞

    Gruß
    KingSize



  • vielleicht ein fehler in der standardbibliothek?

    versuch mal

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

Anmelden zum Antworten