Avatar
Tomáš Vondra:

Ahoj, mam problém s jednoduchým programem v C. Učitelce hází warning (mně ne) a nevím, jak ho opravit. Chybu mi i popsala viz níže.

  === Projekt, Debug ===

\main.c||In function 'main':|
\main.c|129|war­ning: 'fw' may be used uninitialized in this function [-Wuninitialized]|

  === Build finished: 0 errors, 1 warnings (0 minutes, 0 seconds) ===

Varování opravíte nejlépe tak, že výstupní soubor otevřete před do {} while cyklem ve funkci main() a zavřete za tímto do {} while cyklem. Z funkce vypocet_zivin() se parametr fw musí předávat dále do funkce tisk(), kde už lokální proměnná typu FILE* a otevírání a uzavírání souboru nebude.

I tak si ale nevím rady, není tu někde ochotný? Odměna jistá. Link na program tady: http://leteckaposta.cz/706684659

 
Odpovědět 6. září 21:22
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Tomáš Vondra
Martin Dráb:

Problém je zřejmě v tom, že ve funkci main neinicializuješ proměnnou fw, kteroužto pak předáváš do funkce vypocet_zivin. Statická analýza kódu použitá překladačem zřejmě nevidí, že tento parametr ve funkci vypocet_zivin stejně nepoužíváš, takže fakt, že jsi jej neinicializoval, v tomto případě nevadí.

Takže nejjednodušší řešení je do vypocet_zivin žádný parametr nedávat a proměnnou fw ve funkci main úplně zrušit.

Další výhrada paní učitelky je k tomu, že při každém tisku (funkce tisk) otevíráš a zavíráš výstupní soubor. Lepší by bylo výstupní soubor otevřít na začátku programu, pak do něj zapisovat (případně používat po zápisu fflush(fw), aby data nezůstávala viset ve vyrovnávací paměti) a na konci programu jej uzavřít. ALe to s tím varováním nesouvisí.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 6. září 22:24
2 + 2 = 5 for extremely large values of 2
Avatar
Tomáš Vondra:

Jop, ráno jsem to přesně takto vyřešil, s tím fflush máš pravdu, použiji u zkoušky při otázce, jak by šel program vylepšit. Děkuji !

 
Nahoru Odpovědět 7. září 20:39
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 3 zpráv z 3.