kostenloser Webspace werbefrei: lima-city


C: Falsche Ausgabe bei fscanf

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    x*****k

    Hallo Leute!

    Ich brauche wiedermal eure Hilfe ;)
    Ich lese eine Datei namens input.txt mit folgendem inhalt ein:
    1 1
    -5 -15
    4 4
    9 8
    0 0


    Als Ausgabe mit fprintf bekomme ich dann aber

    1 1
    -15 -15
    4 4
    8 8
    0 0


    Ich tippe mal darauf, dass ich irgendwo vergessen habe, einen Puffer zu entleeren (oder so)
    Kompiliert habe ich bereits unter Linux mit GCC und unter Windows mit Dev-C++.
    Den Einlesepuffer zu entleeren habe ich mithilfe von fflush(stdin) versucht, hat aber nichts gebracht. ^^

    Hier mal ein Teil meines Codes, damit ihr wisst, wie ich einlese:
    // ...
            for (j = 0; j < n; j++)
    	 {
    		fscanf(pf, "%d %d\n", &v[j], &v[j]);
    		printf("Durchlauf %d: %d %d\n", j, v[j], v[j]);
    	 }
    // ...

    m steht hierbei für die Anzahl der Zeilen (wird vorher eingegeben, wie viele Werte benötigt werden)!

    Ich hoffe das mir jemand von euch grossen C-Gurus helfen kann ;)

    mfg x-bLacK :cool:

    Edit Mal die relevanten Teile gepostet!

    Beitrag geändert: 11.11.2008 18:52:04 von x-black
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. k***o




    // ...
    for (i = 0; i < m; i++)
            {
            fscanf(pf, "%d %d %dn", &x[i], &y[i], &r[i]);
            fflush(stdin); // bringts derzeit nicht wirklich
            printf("Durchlauf %d: %d %d %dn", i, x[i], y[i], r[i]);
            }
    // ...




    Ich glaube du hast ein Fehler bei &dn
    Das sollte wohl &d [Backslash]n heisen! und fflush kannste weglassen.

    Beitrag geändert: 11.11.2008 17:47:53 von koslo
  4. Autor dieses Themas

    x*****k

    Hi!

    Danke für die Antwort, aber das n war für \\n, nur das bei Lima hier die Backslashes escaped werden.
    Und ohne fflush hab' ich leider den selben Effekt.

    mfg x-bLacK :cool:
  5. Ich kann dir leider nur einen Ansatz des Fehlers geben. Verstehe noch nicht genau, was du mit deinem Programm machen willst:


    die Fehler treten immer auf, nachdem du hast 3 arrays. Es kommen IMMER fehler, wenn du ein Array auslässt. Schau dort mal nach. Schau einfach mal, was passiert, wenn du alle Arrays ausgefüllt lässt....

    daswegen bei der eingabe der input.txt einfach mal die 0 ersetzen.

    btw: 3:-4 0 4 was ist aus der Zeile entstanden?

    also du hast eigentlich schon ein /n drin? kein %dn?
  6. Autor dieses Themas

    x*****k

    Hi!

    Danke für deine Hilfe.
    Also für diese Schleife ist eigentlich nur folgender Teil meiner Input.txt relevant:
    Teilinhalt input.txt
    1 1
    -5 -15
    4 4
    9 8
    0 0


    Der dazugehörige Code zum Einlesen ins Array:
    Code 
    // ..
                      for (j = 0; j < n; j++)
                      {
                            fscanf(pf, "%d %d \n", &v[j], &v[j]);
                            printf("Durchlauf %d: %d %d \n", j, v[j], v[j]);
                      }
    // ..

    Dies ist jetzt wirklich das, was mit dem Problem in Verbindung steht. Hatte vorher ein kleines Durcheinander mit den vielen Schleifen! ;)

    Das n steht ja für den Zeilenumbruch. Jetzt hab' ich alles escaped, also der gepostete Codeteil stimmt genau mit dem meinem überein.

    Und nochmals zum Verständnis:
    Ich möchte mein kleines C Programm dazu bringen, ein paar Werte (int) aus einer Textdatei (input.txt) auzulesen.
    Da in diesem Codeteil (gepostet) aber jede 2. Linie falsch ausgegeben wird, ist nunmal kein Verlass darauf :)

    Freue mich auf Antworten.

    mfg x-bLacK :cool:

    Edit: Bekomm das mit dem Cariagereturn nicht hin, auf Lima wird Backslash nachwievor weggelassen! Dort wo also 'n' steht sollte [Backslash]n stehen :)
    Edit II: Hab die Textdatei mal mit 10 weiteren Werten gefüllt! Bei jedem zweiten Schleifendurchlauf, ist die erste Zahl falsch!

    Beitrag geändert: 11.11.2008 18:54:30 von x-black
  7. Autor dieses Themas

    x*****k

    Leuteeeeee -.-'

    Dieses Problem hat mich gute 2 Stunden gekostet, und jetzt ratet mal, woran es lag!

    // ..
     for (j = 0; j < n; j++)
     {
     fscanf(pf, '%d %d \n', &v[j], &v[j]); // Ich Idiot, beim zweiten mal muss w stehen!
     printf('Durchlauf %d: %d %d \n', j, v[j], v[j]); // Hier auch
     }
    // ..

    Also so:
    // ..
     for (j = 0; j < n; j++)
     {
     fscanf(pf, '%d %d \n', &v[j], &w[j]); 
     printf('Durchlauf %d: %d %d \n', j, v[j], w[j]);
     }
    // ..


    Kein Wunder waren manche Variablenwerte doppelt vorhanden!

    Nun ja, ich danke allen, die sich ansatzweise die Mühe gemacht haben, mein Problem zu verstehen!

    - - Kann geclosed werden - -

    mfg x-bLacK :cool:
  8. k***o

    lol :lol:

    ich glaub ich brauch ne brille.



    Beitrag geändert: 11.11.2008 20:00:37 von koslo
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!