Stránka 3 z 5

Napsal: 07 říj 2015, 21:30
od jiri255
ten kod s tim return; je dobry :-)
musel jsem s toho vyhodit to if error to mi zase hlasilo ze neni deklarovan error, ale kdyz jsem to tam doplnil takto, tak se to vraci a provadi to opetovne kontrolu toho if v tom loop což je super muzu pozadat o objasneni co presne to "do" dela a to while(0) znamena co presne?


Kód: Vybrat vše

void loop() { 

      //hlavni funkce ke ktere se potrebuju vracet
      if (teplomer1() >=50) {
        Serial.print("nebezi");
       getZkouska();
        } else {
        Serial.print("bezi");
       getTest();
        }
     }

 void getTest() { 
       //a tady muzou byt dalsi podminky
        //else if a podobne     
       
          do {
            return;
            }while(0);
       }

 void getZkouska() { 
       //a tady muzou byt dalsi podminky
        //else if a podobne   
       
          do {
            return;
            }while(0);
       }


Napsal: 07 říj 2015, 21:30
od Cowley
Ta se mohla ztratit při kopírování sem na diskusi...

Je přece jasné, že to není celý program, ale jen část, co ho trápí...

Napsal: 07 říj 2015, 21:32
od jiri255
jj zavorka se ztratila pri kopirovani za to se omlouvam ten kod byl spis pro predstavu

Napsal: 07 říj 2015, 21:34
od Cowley
jiri255 píše:... pozadat o objasneni co presne to "do" dela a to while(0) znamena co presne?



Význam jednotlivých funkcí máš v návodu v překladači v HTML souborech...

Napsal: 07 říj 2015, 21:34
od lesana87
Dyť ti tam chybějí zase, v obou funkcích, tak jaké ztrácení při kopírování?
Nejdřív se ti ty funkce nevracely, protože neměly konec, teď se vracejí, protože v nich nic není.

Napsal: 07 říj 2015, 21:38
od jiri255
ten kod je jen pro predstavu nejsou tam v tech void getneco ani zadne funkce, tak prosim neresme zavorky....
snazim se sem vlozit co nejjednodussi kod, aby jsme nalezli reseni a nemuseli se zabyvat nejakym cvakanim relatek a blikanim led coz by uz tak neprehledny kod jeste vic zkomplikovalo.

Napsal: 07 říj 2015, 21:38
od mtajovsky
neni deklarovan error - Jéje, to byl tzv. pseudokód, návod jak to konstrovat, ne konkrétní kód. Ten error je obecně naznačená nejaká detekovaná chyba, která ukončuje běh kódu uzavřeného do do-while.

while(0) se nikdy nevyhodnotí jako pravda, takže cyklus proběhne jen jednou, jako kdyby tam vůbec nebyl.

jiri255 píše:ten kod je jen pro predstavu nejsou tam v tech void getneco ani zadne funkce, tak prosim neresme zavorky....
Tak to máte smůlu, v céčku závorky musíte řešit vždycky. Jsou na struktuře programu téměř to nedůležitější. Jestli vám překladač pro arduino neřekl, že tam závorka chybí a neodmítnul udělat binárku, tak kdoví co jste do MCU vlastně naládoval.

Napsal: 07 říj 2015, 21:41
od ZdenekHQ
Taky mám problém s náznaky náznaků kódu a chápu je úplně jinak. A podobně odpovídám a výsledek je chaos. Někde je chyba. Return/Break

Napsal: 07 říj 2015, 21:43
od mtajovsky
Tak jak jsem měl trochu obecně popsat variantu k ukončování pomoci goto? :?

Napsal: 07 říj 2015, 21:44
od lesana87
jiri255 píše:ten kod je jen pro predstavu nejsou tam v tech void getneco ani zadne funkce, tak prosim neresme zavorky....
snazim se sem vlozit co nejjednodussi kod, aby jsme nalezli reseni a nemuseli se zabyvat nejakym cvakanim relatek a blikanim led coz by uz tak neprehledny kod jeste vic zkomplikovalo.

Když sem dáš prázdnou funkci a tvrdíš o ní, že se nevrací a že na závorkách nezáleží, tak pak není co řešit. :?

Napsal: 07 říj 2015, 21:46
od ZdenekHQ
mtajovsky píše:Tak to máte smůlu, v céčku závorky musíte řešit vždycky.


Nejenom v céčku. Občas se závorek nemůžu dopočítat a překladač pořád nadává. Metoda "odsazování" TAB-em je mě dobře známá, jen některé editory to poněkud ignorují a celý to rozhodí.

Napsal: 07 říj 2015, 21:46
od jiri255
ano je to neco jako pseudokod :-) ...,takze jestli to spravne s toho textu chapu, tak to while(0) tam byt nemusi?

tedy jen

Kód: Vybrat vše

          do { 
            return;
            }

Napsal: 07 říj 2015, 21:47
od ZdenekHQ
mtajovsky píše:Tak jak jsem měl trochu obecně popsat variantu k ukončování pomoci goto? :?


To se týkalo dotazu, nikoliv Tebe.

Napsal: 07 říj 2015, 21:53
od mtajovsky
jiri255 << Ten pseudokód se netýká tvého programu, to jsem jen replikoval uživateli zmije, který sem dal kousek Linuxu jako přiklad použití goto.

while tam být musí, je to syntaxe pro jeden ze standardních strukturovaných bloků (a sice pro cyklus) v céčku. Ale while(0) nikdy nevrátí řízení zpět na začátek cyklu, a tak proběhne jen jedenkrát, tudíž jako by tam nebyl. Jeho význam je v umožnení použití break jako náhrady za goto.

Napsal: 07 říj 2015, 21:55
od jiri255
aha koukam ted na to "do" a "while" a to by melo byt tedy spravne asi takto,
ze:

Kód: Vybrat vše

void loop() { 

      //hlavni funkce ke ktere se potrebuju vracet
      if (teplomer1() >=50) {
        Serial.print("nebezi");
       getZkouska();
        } else {
        Serial.print("bezi");
       getTest();
        }
     }

 void getTest() {     
        do {
    //ty podminky se vepisuji sem treba
    digitalWrite(2,LOW);
    //a potom to return vraci zpet do loop
            return;
            }while(0); //a to while je tedy konec tohoto podprogramu
       }

 void getZkouska() {   
       
          do {
   digitalWrite(8,HIGH);   
            return;
            }while(0);
       }


a jeste, kdyz dam do while(2) tak to znamena opakuj 2x a pak se vrat do loop?