Anonymní profil ls2015 – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil ls2015 – Programujte.comAnonymní profil ls2015 – Programujte.com

 

Příspěvky odeslané z IP adresy 85.13.75.–

ls2015
C / C++ › C++ - detekce zda do proměnn…
17. 8. 2015   #204367

if (!isdigit(input)) cout << "Toto není číslice!" << endl; cout << "Prosim, zadejte ZNOVU volbu: " << endl; else //TOTO JE TEN PŘEBYTEČNÝ else cin >> volba;

TOTO JE TEN PŘEBYTEČNÝ else

Není: myslel sem to takto: pokud nezadám číslo, vypíše mi to oznámení a žádost o znovu zadání, pokud číslo zadám, dojde k dalšímu kroku, a to je převod znaku do proměné "volba".

ls2015
C / C++ › C++ - detekce zda do proměnn…
17. 8. 2015   #204365

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

[code]#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;
}[/code]

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

ls2015
C / C++ › C++ - detekce zda do proměnn…
11. 8. 2015   #204262

#5 kikot
Co tím chtěl básník říci?

C / C++ › C++ - detekce zda do proměnn…
10. 8. 2015   #204185

a ani nic z tohoto nepomohlo:

http://stackoverflow.com/questions/19521320/why-do-i-get-an-infinite-loop-if-i-enter-a-letter-rather-than-a-number

C / C++ › C++ - detekce zda do proměnn…
10. 8. 2015   #204184

Ahoj, začínám, a přestože jsem vygooglil několik různých řešení, neuspělo u mě ani jedno.

Mám program, kde je menu ovládáno pomocí čísel ( 8) Konec, a podobně), a chci tam dodat detekci 

situace, kdy mi program oznámí zadání "ne-čísla" - zatím mi jen vypíše chybu, když napíšu číslo, které v menu už není. "else if( isalpha(volba) )  " je místo detekce nečísla, zkoušel sem tam ale i jiné možnosti.

Děkuji za nápady.

#include <iostream>
#include <cmath>
#include <ctype.h>
using namespace std;
int main()
{
  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 >> volba;
     
     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 == 2) 
     {
    cout << "Zvoleno nasobeni:" << 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 == 3) 
     {
    cout << "Zvoleno odcitani:" << 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 == 4) 
     {
    cout << "Zvoleno deleni:" << endl;
    //cout << "POZOR: pri deleni typu 10/4 je nutny zapis ve formatu 10.0/4" << endl;   V manuálu to ale tak bylo napsáno, čím to je?
    //cout << "anebo 10/4.0, program jinak nezobrazi udaje za desetinou carkou." << endl;
    cout << "Zadejte prvni cislo: " << endl;
    cin >> deleni;
    cout << "Zadejte druhe cislo: " << endl;
    cin >> cislo1;
    deleni /= cislo1;
    cout << "Vas vysledek: " << endl;
    cout << deleni << endl;
  }
    else if(volba == 5) 
     {
    cout << "Zvoleno MODULO (navratka zbytku po deleni):" << 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 == 6) 
     {
       cout << "Zvolen vypocet povrchu kruhu:" << endl; // P = π × r², umocnění se dělá pomocí funkce
        cout << "Zadejte polomer kruhu: " << endl; // pow, definované  v souboru cmath - pow(2,  3)
        cin >> polomer;                             // umocní dvě na třetí
        povrch = 3.14 * pow(polomer,  2);          // http://kruh.wikina.cz/ ;
        cout << "Vas vysledek: " << endl;
        cout << povrch << endl;
  }
    else if(volba == 7) 
     {
       
        cout << "test rez" << endl;
  }
     else if(volba == 8) 
     {
       cout << "Ukonceni programu..." << endl;
     }
      else if( isalpha(volba) )  
     {
       
        cout << "Toto neni cislo!" << endl;
     }
  else //doplnit hlídání CÍSELNÝCH výrazů
     {
       // Displaying error message
       cout << "Zadan neplatny udaj." << endl;
     }
  }
  while(volba != 8);  
   
   return 0;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032020 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý