Opakovanie cyklu pri čítaní zo súboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Opakovanie cyklu pri čítaní zo súboru – C / C++ – Fórum – Programujte.comOpakovanie cyklu pri čítaní zo súboru – C / C++ – Fórum – Programujte.com

 

Frederik
~ Anonymní uživatel
3 příspěvky
5. 11. 2014   #1
-
0
-

Mám problém s nekonečným opakovaním cyklu v kóde.

void porovnanie(FILE *f)
{
    int a,b,c,d,i,j,k,l;

    printf("FC Pocet navstevnikov v stovkach\n");
    printf("   0     5     10    15    20\n");
    printf("#  |*****|*****|*****|*****|\n");
    fscanf(f,"%d",&k);
    for(l=1;l<=k;k++)
    {
        fscanf(f,"%d",&a);
        printf("   Program c. %d\n",a);
        fscanf(f,"%d",&c);
        for (i=1;i<=c;i++)
        {
            printf("%d  |",i);
            b=fscanf(f,"%d",&d);
            if (b==EOF) break;
            for(j=0;j<=d;j=j+100);
            {
                if ((j==600) || (j==1100) || (j==1600))printf("|");
                printf("*");
            }
            printf("     Celkom: %d\n",d);
        }
    }
}

Mal by načítavať celé čísla z textového súboru (čísla sú v jednotlivých riadkoch v súbore) prvý. Chcel som aby prvý fscanf načítal číslo, ktoré udáva počet opakovaní, ale pri spustení ide celý cyklus od prvého for nekonečno krát. 

Nahlásit jako SPAM
IP: 78.98.226.–
Kit+15
Guru
5. 11. 2014   #2
-
0
-

#1 Frederik
V prvním cyklu inkrementuješ špatnou proměnnou.

Proměnné máš chybně pojmenované a proto se ve vlastním programu nevyznáš.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Frederik
~ Anonymní uživatel
3 příspěvky
5. 11. 2014   #3
-
0
-

To sem si už všimel ale tak, či tak to nechce zastavit.

Nahlásit jako SPAM
IP: 78.98.226.–
Kit+15
Guru
5. 11. 2014   #4
-
0
-

#3 Frederik
Trojitý cyklus je prostě moc a když máš tak hloupé názvy proměnných, tak se ani nedivím, že chybu nevidíš. Přejmenuj si je a chybu rychle najdeš.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Frederik
~ Anonymní uživatel
3 příspěvky
5. 11. 2014   #5
-
0
-

Upravil som, to. Prvú iteráciu cyklu urobí ako má ale druhá sa opakuje. Fakt neviem nájsť chybu, preto som sa prišiel opýtať sem...

Nahlásit jako SPAM
IP: 78.98.226.–
5. 11. 2014   #6
-
0
-

Načteš do k něco ze souboru. Hned v prvním cyklu to inkrementuješ při každé jeho iteraci. Opravdu by to chtělo si dát názvy proměnných tak aby fungovaly jako pomůcka pro orientaci co je co. i, j, k, l... nic neříkající, když si dám tlak, teplota... (názvy podle skutečné funkce proměnných), tak už intuitivně vím, co je co. Kromě toho u každého fscanf je na místě se přesvědčit, že jsem přečetl očekávaná data, soubor může končit i o něco dřív, než si myslím nebo může mít neočekávaný formát (místo dat tam nasypali smetí). Další "finta" může spočívat v tom, že pomocí jediného fscanf mohu načíst i více položek. Jak správně fscanf nastavit záleží na uspořádání dat v souboru.

hu

Nahlásit jako SPAM
IP: 2001:67c:1222:800:5089:d0...–
Kit+15
Guru
5. 11. 2014   #7
-
0
-

#5 Frederik
Kromě toho je dobrým zvykem psát za interpunkcí a klíčovými slovy mezeru. Zkus použít program indent nebo astyle a hned ti ukáže další chybu, která sice nezpůsobuje nekonečný cyklus, ale způsobí nefunkčnost.

Nahlásit jako SPAM
IP: 147.229.242.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 100 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý