Avatar
Head
Člen
Avatar
Head:

mam tu taky jednoduchy program ale posledny udaj mi vracia na vystupe 2x... nevedel by mi neikto poradiť prečo?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *f;
    f = fopen("ceny.dat", "wb+");
    int cena,max=0;
    for (;;)
    {
        printf("Zadaj cenu(zadavanie ukoncis 0):");
        scanf("%d", &cena);
        if (cena == 0)
            break;
        fwrite(&cena,sizeof(cena),1,f);
    }
    fseek(f, 0, SEEK_SET);

    while (feof(f) == 0)
    {
    fread(&cena, sizeof(cena), 1, f);
    printf("cena knihy:%d\n", cena);
    if (cena > max)
        max = cena;
    }
    printf("maximalna cena je %d.", max);
    fclose(f);
    return 0;
}
 
Odpovědět 11.5.2015 13:26
Avatar
Odpovídá na Head
Libor Šimo (libcosenior):

Skús takto:

#include <stdio.h>
#include <stdlib.h>

int main()
{
     FILE *f;
     f = fopen("ceny.dat", "wb+");
     int cena = 1,max=0;
     while (cena != 0)
     {
         printf("Zadaj cenu(zadavanie ukoncis 0):");
         scanf("%d", &cena);
         fwrite(&cena,sizeof(cena),1,f);
     }
     fseek(f, 0, SEEK_SET);

     while (1) {
     fread(&cena, sizeof(cena), 1, f);
         if (cena > 0) {
            printf("cena knihy:%d\n", cena);
            max = cena > max ? cena : max;
        }
        else
            break;
     }
     printf("\nmaximalna cena je %d.\n\n", max);
     fclose(f);
     return 0;
}
Nahoru Odpovědět 11.5.2015 14:03
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):

Aby to bolo bližšie tomu tvojmu:

#include <stdio.h>
#include <stdlib.h>

int main()
 {
    FILE *f;
    f = fopen("ceny.dat", "wb+");
    int cena,max=0;
    for (;;)
    {
        printf("Zadaj cenu(zadavanie ukoncis 0):");
        scanf("%d", &cena);
        if (cena == 0)
            break;
        else
            fwrite(&cena,sizeof(cena),1,f);
     }
     fseek(f, 0, SEEK_SET);

     while (1) {
         fread(&cena, sizeof(cena), 1, f);
         if (feof(f))
            break;
         else {
             printf("cena knihy:%d\n", cena);
             if (cena > max)
                 max = cena;
         }
     }
     printf("maximalna cena je %d.", max);
     fclose(f);
     return 0;
 }
Nahoru Odpovědět  +1 11.5.2015 14:51
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Head
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
Head:

dakujem .. ale predsa by ma zaujmalo co tam spôsobuje že sa ten posledny prvok vypise 2x

 
Nahoru Odpovědět 11.5.2015 14:55
Avatar
Odpovídá na Head
Libor Šimo (libcosenior):

Pre toto:

while (!feof(f)) {
   printf("feof = %d\n", feof(f)); // pre toto = vypis hodnoty feof()
   fread(&cena, sizeof(cena), 1, f);
   printf("cena knihy:%d\n", cena);
   if (cena > max)
       max = cena;
}
Nahoru Odpovědět 11.5.2015 15:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Head
Martin Dráb:

dakujem .. ale predsa by ma zaujmalo co tam spôsobuje že sa ten posledny prvok vypise 2x

Než data použiješ (vypíšeš), zkus testovat, zda jsi je opravdu načetl (funkce fread vrátí počet načtených elementů (pro tebe 1)).

Nahoru Odpovědět 11.5.2015 17:53
2 + 2 = 5 for extremely large values of 2
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.