Cyklus while v C – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Cyklus while v C – C / C++ – Fórum – Programujte.comCyklus while v C – C / C++ – Fórum – Programujte.com

 

Marek
~ Anonymní uživatel
521 příspěvků
9. 2. 2019   #1
-
0
-

Dobrý deň,

potrebujem s niečim poradiť. Mám jednoduchý program na zistenie či je zadané číslo párne alebo nepárne. A chcem, aby sa po zadaní nepárneho čísla program zopakoval a znova vyzval užívateľa na zadanie čísla.

Prikladám zdrojový kód:

Připojen obrázek.

V tomto kóde po zadaní párneho čísla na prvý pokus funguje všetko ako má - program vypíše, že zadané číslo je párne. Po zadaní nepárneho čísla sa vypíše, že číslo je nepárne, "zapne" sa cyklus a program znova pýta ďalšie číslo. Ak ale zadám v priebehu tohto cyklu už párne číslo, program aj tak vypíše, že číslo je nepárne. Čo všetko by malo byť obsiahnuté v cykle, aby to fungovalo správne? 

Ďakujem za vaše rady.  

Nahlásit jako SPAM
IP: 176.102.96.–
jerry
~ Anonymní uživatel
512 příspěvků
9. 2. 2019   #2
-
+1
-
Zajímavé
Kit +

#1 Marek
no ten řádek vysl = i % 2 musíš mít přeci uvnitř toho cyklu while ne ?

a máš ten kod nějakej divnej ... to první ptaní se smaž a nech jenom ten cyklus ne ?

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:3dae:8675:f798:ca72...–
Marek
~ Anonymní uživatel
521 příspěvků
9. 2. 2019   #3
-
0
-

#2 jerry
ok, už to funguje, ďakujem za pomoc

Nahlásit jako SPAM
IP: 176.102.96.–
KIIV
~ Moderátor
+43
God of flame
9. 2. 2019   #4
-
0
-

Je to typicky priklad na:  do { } while ();

Mimochodem, jen pro zajimavost: Co se stane, kdyz ti uzivatel nezada cislo?

Nahlásit jako SPAM
IP: 46.135.98.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
9. 2. 2019   #5
-
0
-

#4 KIIV
Vidím to spíš jako typický příklad na for (;;) { ... }

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
10. 2. 2019   #6
-
0
-

   

int i = 0;

do {
  printf("neco zadej: ");
  scanf("%d", &i); // neresim ted nespravny vstup a EOF
} while ((i % 2) == 1);

// vyhodnoceni
int i = 0;

printf("Neco zadej: ");
scanf("%d", &i);

for ( ; (i % 2) == 1 ; ) {
  printf("Neco zadej: ");
  scanf("%d", &i);
}

#5 Kit

Mas pravdu, jak sem mohl byt tak blbej a myslet si, ze do while bude lepsi, to nepochopim...

Nahlásit jako SPAM
IP: 46.135.98.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
10. 2. 2019   #7
-
0
-

#6 KIIV
printf() a scanf() tam máš zbytečně 2× a proto ten for vypadá hůř.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
10. 2. 2019   #8
-
0
-

#7 Kit
takze radsi pridas magickou konstantu, ktera musi spustit telo loopu. Vis, ze do while nepotrebuje ani to?

Pokud to bude ve striktnim C, tak deklarace musi byt na zacatku bloku, pak si nekdo vzpomene, ze by to chtelo spis liche a ne sude, tak se zmeni podminka a svete div se, ono to nebeha.

Nebo jako v jeho pripade, neinicializuje promennou, tak to bude obcas fungovat, obcas to fungovat nebude, jelikoz se lokalni promenne samovolne neinicializuji (narozdil od statickych a globalnich)

Kazda zbytecnost je zarodek bugu.

Nahlásit jako SPAM
IP: 46.135.98.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
10. 2. 2019   #9
-
0
-

#8 KIIV
Jakou magickou konstantu? K čemu?

Cykly do .. while nepoužívám, ale netvrdím, že jsou špatně.

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
10. 2. 2019   #10
-
0
-

#9 Kit
 

int i = 1; // pro zajisteni vykonani tela loopu to musi byt liche cislo
           // urcite nesmi zustat neinicializovane, jinak to bude o nahode, co zrovna zustalo v ramce

for ( ; (i % 2) == 1 ; ) {
  printf("Neco zadej: ");
  scanf("%d", &i);
}

Jinak uz netusim, jak by sis to predstavoval (jako ze budes muset hodit svoji ukazku, ja jsem treba jen moc fixovanej na tohle a jde to uplne jinak a lepe)

Nahlásit jako SPAM
IP: 46.135.98.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
10. 2. 2019   #11
-
0
-

#10 KIIV
Napsal bych to asi takhle. Možná to vypadá divně, ale když se do toho doplní patřičné kontroly vstupu, tak to bude vypadat docela normálně.

int i;

for (;;) {
    printf("Neco zadej: ");
    scanf("%d", &i);
    if ((i % 2) == 1) {
        return i;
    }
}
Nahlásit jako SPAM
IP: 37.188.151.–
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, 109 hostů

Podobná vlákna

Cyklus Do While — založil Filips

Cyklus — založil Jan Burant

Cyklus — založil Jirka

Cyklus while — založil pep

Cyklus — založil Elendor

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ý