Problém s programování if/else C++

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
p32
Příspěvky: 15069
Registrován: 13 led 2007, 01:00
Bydliště: Olomouc

#16 Příspěvek od p32 »

RAD - rapid application development

Uživatelský avatar
arduino2015
Příspěvky: 158
Registrován: 30 led 2015, 01:00

#17 Příspěvek od arduino2015 »

Ahoj, nakonec sem se pokusil to celé překopat na jednotlivě volané funkce, ale zase to hlásí nějaký chyby:

Kód: Vybrat vše

#include <iostream>
#include <cmath>
#include <ctype.h>
using namespace std;
int main()
{
  char input;
  int volba, cislo1, cislo2 ; // deklarovani funkce volba a operandů příkladů
  float deleni ; // deleni se zbytkem umoznuje pouze nekolik druhu pameti, viz Floating point anebo Pohyblivá řádová čárka
  double polomer, povrch ; // podobný typ jako float
  do //do-while loop starts here.that display menu again and again until user select to exit program
  { 
     //Vlastni nabidka:
     cout << "Vitejte v ukazkovem programu matematickych operaci." << endl;
	 cout << "Upozorneni: pri psani desetinnych cisel dodrzujte" << endl;
	 cout << "anglosasky standart, tudiz 2.5 (nikoliv 2,5)!" << endl;
	 cout << "(Vyhotoven: 9.8.2015)" << endl;
	 cout << "1) Soucet +" << endl;
     cout << "2) Soucin *" << endl;
     cout << "3) Rozdil -" << endl;
     cout << "4) Podil / " << endl;
     cout << "5) Modulo % " << endl;
     cout << "6) Povrch kruhu " << endl;   // obvod kruhu - Circumference
     cout << "7) rez" << endl;
     cout << "8) KONEC" << endl;

     cout << "Prosim, zadejte volbu: ";
     cin >> input;
	 if (!isdigit(input))
	 cout << "Toto není číslice!" << endl;
	 cout << "Prosim, zadejte ZNOVU volbu: " << endl;
	 else 
	 cin >> volba;   
    }
   
   return 0;
}
	
	 void menu()
{ if(volba == 1) 
     {
    cout << "Zvoleno scitani:" << endl;
    cout << "Zadejte prvni cislo: " << endl;
	cin >> cislo1;
	cout << "Zadejte druhe cislo: " << endl;
	cin >> cislo2;
	cislo1 += cislo2;
	cout << "Vas vysledek: " << endl;
	cout << cislo1 << endl;
	 }
     else if(volba == 8) 
     {
       cout << "Ukonceni programu..." << endl;
     }
  else //doplnit hlídání CÍSELNÝCH výrazů
     {
       // Displaying error message
       cout << "Zadan neplatny udaj." << endl;
     }
  }
  while(volba != 8);  
      while (volba < 0)
    {
        cin >> input;
       volba = static_cast<int>(volba) - 48;
    }
   
   return 0;
}
CHAR.cpp:32:3: error: 'else' without a previous 'if' ---pročpak, když ho tam mám?
CHAR.cpp:36:11: error: expected 'while' before numeric constant
CHAR.cpp:36:11: error: expected '(' before numeric constant

Uživatelský avatar
ross4435897
Příspěvky: 426
Registrován: 10 lis 2009, 01:00
Bydliště: Brno

#18 Příspěvek od ross4435897 »

a tohle je ok? ... else if(volba ==
vypada to ze to to by mohlo byt to misto kteremu ten kompilator nerozumi

Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#19 Příspěvek od mtajovsky »

Přepsal jsem část kódu počínaje funkcí void menu() do trochu lepšího formátování:

Kód: Vybrat vše

void menu()
{ 
    if(volba == 1)
    {
        cout << "Zvoleno scitani:" << endl;
        cout << "Zadejte prvni cislo: " << endl;
        cin >> cislo1;
        cout << "Zadejte druhe cislo: " << endl;
        cin >> cislo2;
        cislo1 += cislo2;
        cout << "Vas vysledek: " << endl;
        cout << cislo1 << endl;
    }
    else if(volba == 8)
    {
        cout << "Ukonceni programu..." << endl;
    }
    else //doplnit hlídání CÍSELNÝCH výrazů
    {
       // Displaying error message
        cout << "Zadan neplatny udaj." << endl;
    }
}
while(volba != 8);

    while (volba < 0)
    {
        cin >> input;
        volba = static_cast<int>(volba) - 48;
    }
   
   return 0;
}	
Tak a teď k čemu patří while(volba != 8 ); ? Ta pravá složená závorka před tím ukončuje tělo funkce a ne blok do-while. Nehledě na to, že by se zde program zacyklil. V první půlce kódu je zase blok do bez klausule while. Hlavním příznakem zmatku v blocích je to, že počet levých a pravých složených závorek není shodný. Celkem je tam 7 levých závorek a 8 pravých.

Uživatelský avatar
chuckyw
Příspěvky: 19
Registrován: 01 zář 2014, 02:00

#20 Příspěvek od chuckyw »

arduino2015: nauč se uzavírat do { } všechny těla podmínek, cyklů, apod. i jednořádková, ušetříš si s tím spoustu problémů:
if (!isdigit(input))
cout << "Toto není číslice!" << endl;
cout << "Prosim, zadejte ZNOVU volbu: " << endl;
else
cin >> volba;
je jasná chyba, kdybys psal:
if (!isdigit(input))
{
cout << "Toto není číslice!" << endl;
cout << "Prosim, zadejte ZNOVU volbu: " << endl;
}
else
{
cin >> volba;
}
nic podobného by se ti nestalo

p32
Příspěvky: 15069
Registrován: 13 led 2007, 01:00
Bydliště: Olomouc

#21 Příspěvek od p32 »

Tak, tak, pravdu má předseda. :wink:

Uživatelský avatar
arduino2015
Příspěvky: 158
Registrován: 30 led 2015, 01:00

#22 Příspěvek od arduino2015 »

Ok, díky.
Jaká skripta pro C++ jsou vhodná pro začátečníka? Děkuji...

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“