break a continue

Sekcia: Programovanie 24.03.2010 | 22:03
Avatar johnnycage Debian Testing, GNOME 2.28.2  Používateľ
Zdravim.

Na pisanie programov pouzivam Geany. Kompilator mam nainstalovany gcc a g++. Napisal som si kratky programik, konkretne tento:

cout << "Hadajte cislo: ";
cin >> odhad;
if (odhad == tajne) {
cout << "Uhadli ste! Pocet pokusov: " << pokusov << ".\n";
break;
}
pokusov++;

Pri pokuse o skompilovanie niektorym z horeuvedenych kompilatorov mi vypisuje chybu:

"break statement not within loop or switch". Co znamena, ze sa mi program nepodari vobec spustit. Da sa toto chovanie nejako potlacit, alebo ako by som mohol takyto typ programu spustit? Viem, ze sa ten program da napisat aj inak, ale to ma nezaujima, zaujima ma, ako taketo chovanie obist.
    • Re: break a continue 24.03.2010 | 22:12
      Avatar Marián Sova Ubuntu 10.10  Administrátor
      Ten break je tam úplne zbytočný. Navyše ako ti píše kompilátor break sa dá použiť iba vo for a switch.
      A ten program, čo si sem dal je celý alebo len časť z neho si vytiahol?
      Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
      • Re: break a continue 24.03.2010 | 22:17
        Avatar johnnycage Debian Testing, GNOME 2.28.2  Používateľ
        To som len vystrihol. Cely tento vysek je este v cykle for. Ten break tam je na to, ze ked dotycny uhadne cislo, nemusi dalej hadat, ale program automaticky skonci. Ako hovorim, viem, ze sa to da spravit aj uplne inak, bez break, lenze mna zaujima, ci sa da obist nejako to varovanie a spustit ten kod aj napriek tomu varovaniu.
        • Re: break a continue 24.03.2010 | 22:24
          Avatar Fridolín Pokorný Fedora 21  Používateľ
          for(int i=0; i<10; i++){
          cout<<"Hadajte cislo: ";
          cin >> odhad;
          if(odhad==tajne){
          cout<<"Uhadli ste! Pokusov: "<< pokusov <<endl;
          break;
          }else pokusov++;
          }

          Podla chybovej hlasky to nemas v cykle. Pozri si kod hore - v cykle for.
          Pripadne si skontroluj zatvorky, ci si neuzavrel cyklus skor, ako si cakal.
          Ak nebudes vediet najst chybu, vloz sem cely for cyklus.
        • Re: break a continue 24.03.2010 | 22:28
          Avatar Marián Sova Ubuntu 10.10  Administrátor
          Tak si to mal dať aj s tým for celé. Lebo podľa tej hlášky to v tom cykle fakt nemáš.
          Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
          • Re: break a continue 24.03.2010 | 22:50
            Avatar johnnycage Debian Testing, GNOME 2.28.2  Používateľ
            Takto vyzera cely program:

            int main() {
            int odhad;
            int pokusov = 1;
            int tajne = 3;

            cout << "Hadajte cislo od jedna do desat.\n";
            cout << "Mas tri pokusy.\n";
            for (int i = 1; i <= 3; i++) {
            cout << "Vas tip: ";
            cin >> odhad;
            if (odhad == tajne) {
            cout << "Uhadli ste! Pocet pokusov: " << pokusov << ".\n";
            break;
            }
            }
            return 0;
            }

            Ale ako som spomenul vyssie, mna zaujima hlavne to, ci je mozne presne taketo, alebo podobne chovanie kompilatora nejako obist. Resp. ci je mozne nejako potlacit vypisovanie chybovych hlasok a takpoviediac spustit program za kazdu cenu. To je to co ma zaujima, ci je mozne nieco taketo, odignorovat vsetky varovania a pokusit sa spustit program aj napriek tomu.
            • Re: break a continue 25.03.2010 | 21:00
              Avatar Marián Sova Ubuntu 10.10  Administrátor
              No chyby sa obísť nedajú. Varovania sú obchádzané automaticky. Tie sa len vypíšu ale program sa skompiluje.
              Hore v hlavičke programu máš čo? Pretože ja som to normálne skompiloval a spustil po pridaní include iostream knižnice a nastavení namespaceu.
              Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
              • Re: break a continue 27.03.2010 | 01:19
                Avatar denwerko Ubuntu,Gentoo,Debian  Používateľ
                btw, akú máš verziu g++ ? pretože mne to skompilovalo a spustilo v poriadku

                g++ -v
                Target: x86_64-linux-gnu
                Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu4' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
                Thread model: posix
                gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu4)
                #include <iostream>
                using namespace std;


                int main() {
                int odhad;
                int pokusov = 1;
                int tajne = 3;

                cout << "Hadajte cislo od jedna do desat.\n";
                cout << "Mas tri pokusy.\n";
                for (int i = 1; i <= 3; i++) {
                cout << "Vas tip: ";
                cin >> odhad;
                if (odhad == tajne) {
                cout << "Uhadli ste! Pocet pokusov: " << pokusov << ".\n";
                break;
                }
                }
                return 0;
                }
              • Re: break a continue 27.03.2010 | 08:48
                Avatar johnnycage Debian Testing, GNOME 2.28.2  Používateľ
                Hore v hlavicke mam #include <iostream> a using namespace std;

                Ked mi to vypisalo tuto chybu, nemal som tam ten cyklus (lenze uz som mal tolko verzii programov, co som skusal vselijake veci, ze som skomolil nejaky hybridny program), mal som tam prikaz break, ktory nebol v cykle a na zaklade toho sa vo mne objavila otazka, ktoru chcem vyriesit. Cenim si toho, ze sa snazite prist na to, preco vypisuje taketo chyby a opravit ten program, ale moja otazka smeruje inde. Teda nejedna sa mi o to, aby ste mi nasli chyby v tom programe, jedna sa mi o to, aby som vyriesil otazku, ze ci sa da nejako, aj ked natvrdo obist ohlasovanie chyb kompilatorom. Cize znovu, C++ sa ucim z knihy, v ktorej su tie priklady napisane a dufam, ze tam su tie priklady bez chyb :) Mne sa jedna cisto len o otazku, ci sa da napr. nejakym prepinacom v konzole, alebo pridanim nejakoho riadku do programu obist ohlasovanie chyb kompilatorom a spustit takyto program za kazdu cenu .. aj keby bol vysledok nezmyselny. To je vsetko, toto je otazka, co ma zaujima.
                • Re: break a continue 27.03.2010 | 12:52
                  Avatar Marián Sova Ubuntu 10.10  Administrátor
                  No ak si si všimol, už som ti na to odpovedal vyššie.
                  Čo ťa nezabije, to ťa posilní | Leták na propagáciu jabbera v pdf | www.mikroprocesory.sk
                • Re: break a continue 27.03.2010 | 13:44
                  shade   Návštevník
                  Ohlasovanie chyb sa da obist poslanim vypisu do /dev//null, ale prelozit a spustit taky program nie. Jazyk ma svoju syntax a ked ju nedodrzis tak prekladac nebude vediet ako ma kod prelozit. Aj ked moderne nastroje speju k tomu aby mohol programovat kazdy kto ma do zadku dieru, tak daleko ako si to predstavujes ty sme sa nastastie este nedostali.
                • Re: break a continue 27.03.2010 | 14:44
                  Avatar usamec   Používateľ
                  nic v zlom, ale ked nie si schopny dodrzat aspon par primitivnych pravidiel, ktore ten jazyk vyzaduje, aby kod bol skompilovatelny, tak chod radsej sadit zemiaky a nie programovat

                  proste ucenim, ktore by chcelo obchadzat chyby a nie sa ucit ich odstranit akurat stracas cas

                  a navyse C++ je dost volny jazyk, taka "sprosta" Java ti hubuje na daleko viac veci (nenainicializovany objekt, neodchytena vynimka, ...)
                  • Re: break a continue 27.03.2010 | 19:05
                    Avatar johnnycage Debian Testing, GNOME 2.28.2  Používateľ
                    To neni o tom, ze nie som schopny dodrzat par pravidiel. Ja viem preco mi ten program nesiel, viem kde som urobil chybu, preto stale opakujem, ze aj ked si to cenim, nepotrebujem, aby ste mi ten program opravili, aby fungoval ... mna len pri tejto chybovej hlaske napadla otazka, ze ci je mozne toto chovanie nejako potlacit, to je vsetko. A kedze sa uz vyssie ktosi vyjadril, ze to neni mozne ziadnym sposobom, tym padom je otazka vyriesena :) O nic ine sa tu nejednalo, o ziadnu opravu programu ani o nic podobne. Jednalo sa mi len o to, ci to je nejakym sposobom mozne realizovat alebo nie.