IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: datove subory

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Head
Člen
Avatar
Head:11.5.2015 13:26

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):11.5.2015 14:03

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):11.5.2015 14:51

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
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:11.5.2015 14:55

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):11.5.2015 15:22

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
Tvůrce
Avatar
Odpovídá na Head
Martin Dráb:11.5.2015 17:53

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.