Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » index verschwindet

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.05.2009, 10:47 Uhr
~berni
Gast


Hallo,

habe ein merkwürdiges Problem:

Bei einem kleinen Übungsprogramm zum Datei-Einlesen verschwindet irgendie der Wert für den Index i.
in der inneren Schleife soll der Index von 0 auf 4 hochgezählt werden. Ich lasse ihn zur Kontrolle vor und nach dem Befehl
Code:
ret = fscanf(pfile, "%d", &buf);
(Zeile 21) ausgeben.
Vor dem Befehl wird er schön auf 1 hochgezählt, nach dem Befehl ist i plötzlich wieder 0!!!
wie kann das passieren?
mein compiler ist mingw.

grüße bernhard



Code:
#include <stdio.h>

main()
{
    FILE *pfile;
    short sum, i, buf, ret;
    
    /* zahlen.dat ist eine Datei mit je 4 short-Zahlen je Zeile */
    pfile = fopen("zahlen.dat", "r");
    if (!pfile)
    {
        printf("Fehler beim Lesen der Datei!");
        return;
    }
    for(;;)
    {
        sum = 0;
        for(i = 0; i < 4; i++)
        {
            printf("i1: %d\n", i);
            ret = fscanf(pfile, "%d", &buf);
            printf("i2: %d\n", i);
            if (ret == EOF) break;
            printf("Zahl: %d%\n", buf);
            sum = sum + buf;
        }
        
        printf("Summe: %d%\n", sum);
        if (ret == EOF) break;
        //printf("\n");
        
    }
    fclose(pfile);
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.05.2009, 11:16 Uhr
Kest
saint


Hi!

Wird wohl am short liegen.

fscanf(pfile, "%d", &buf); liest ein int ein, der zwar nicht größer sein muss, aber wohl ist.

Versuch mal mit fscanf(pfile, "%hd", &buf);
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.05.2009, 11:22 Uhr
~berni
Gast


Das wars,

vielen Dank!!! ich stand wie der Ochs vorm Berg. bis jetzt ist mir nur das ld für long begegnet, das hd kannte ich noch nicht.

Grüße Bernhard
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.05.2009, 20:49 Uhr
banshee



Versteh ich irgendwie nicht. Was hat denn das i damit zu tun?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.05.2009, 22:09 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja


C++:
short sum, i, buf, ret;



dann liegt das so im speicher (byteweise, von oben nach unten):


Code:
ret
ret
buf
buf
i
i
sum
sum



nun liest


C++:
fscanf(pfile, "%d", &buf);



seine daten (weil es 4 bytes liest) über:


Code:
buf
buf
i
i



und überschreibt somit i mit (in dem fall mit 0, weil der eingelesene wert kleiner 65535 ist)
--
class God : public ChuckNorris { };

Dieser Post wurde am 28.05.2009 um 22:10 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: