OLA
trápí mě 2 malé problémy doufám že by jste mi mohli pomoct :-)
1. netuším jak ošetřit abych nemohl do programu vkládat písmena či nějaké znaky
2. jak opravit následující error nikdo
c:\documents and settings\martin bernard\plocha\mb\ppj\ivt - program převod jednotek - full\hlavni.cpp(13) : warning C4067: unexpected tokens following preprocessor directive - expected a newline
C:\Documents and Settings\Martin Bernard\Plocha\MB\PPJ\IVT - Program převod jednotek - full\hlavni.cpp(1431) : fatal error C1076: compiler limit : internal heap limit reached; use /Zm to specify a higher limit
Error executing cl.exe.
prevody.exe - 1 error(s), 1 warning(s)
Fórum › C / C++
Zákaz vkládání písmen a limit error
To ifeeltipsy : Určitě to pude i nějak "líp", ale tak třeba pomůže :)
#include <iostream>
#include <cctype>
using std::cout;
using std::cin;
int main()
{
int x;
do {
cout << "Zadejte cislo: ";
x = cin.get();
cin.get();
if (isdigit(x))
cout << "Uspesne nacteno!";
else
cout << "Nezadali jste cislo, zadejte znovu!\n";
cin.clear();
} while(!(isdigit(x)));
cin.get();
cin.get();
return 0;
}
case 1:
cout << "Zadej dlane, ktere prevedu na centimetry : ";
double dlane;
dlane = 0;
cin >> dlane;
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)" << endl;
break;
spíš jak to vložím sem...
nebo jestli to jde nadefinovat nějak globálně pro všechny...
netuším :-(
alě děkuju
To ifeeltipsy :
Vytvoříš si fci
bool kontrolavstupu() {
double dlane;
cout << "Zadej dlane, ktere prevedu na centimetry: ";
if(!(cin >> dlane)) {
cout << "Spatne Zadano!\n";
cin.clear();
cin.get();
return false;
}
else {
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)\n";
return true;
}
}
Pak do case připíšeš:
do {
if(kontrolavstupu())
vstup = true;
else
vstup = false;
} while (!vstup);
Nezapomeň někam nadeklarovat vstup (nejlépe do main)
bool vstup;
Bald3rr napsal:
To ifeeltipsy :
Vytvoříš si fcibool kontrolavstupu() {
double dlane;
cout << "Zadej dlane, ktere prevedu na centimetry: ";
if(!(cin >> dlane)) {
cout << "Spatne Zadano!
";
cin.clear();
cin.get();
return false;
}
else {
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)
";
return true;
}
}
Pak do case připíšeš:do {
if(kontrolavstupu())
vstup = true;
else
vstup = false;
} while (!vstup);
Nezapomeň někam nadeklarovat vstup (nejlépe do main)bool vstup;
problém je že těch case je přes 100...
šla by vytvořit spíše nějaká podmínka (např. IF), která ošetří vkládání písmen, kterou vložím mezi case a break podobně jak jsem ošetřil záporná čísla.
case 1:
cout << "Zadej dlane, ktere prevedu na centimetry : ";
double dlane;
dlane = 0;
cin >> dlane;
if (dlane < 0)
{
cerr <<"*** Nesmis vkladat zaporna cisla ***" << endl << endl;
cout <<"Pro navrat stiskni libovolnou klavesu" << endl << endl;
system ("pause");
system ("cls");
return main();
}
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)" << endl;
break;
To ifeeltipsy : Teď tě nějak nechápu, tu tvojí podmínku na záporná čísla tam máš 100x?
case 1:
cout << "Zadej dlane, ktere prevedu na centimetry : ";
double dlane;
dlane = 0;
cin >> dlane;
do { // Tady máš připsanou tu kontrolu mezi case a break
if(kontrolavstupu())
vstup = true;
else
vstup = false;
} while (!vstup);
if (dlane < 0)
{
cerr <<"*** Nesmis vkladat zaporna cisla ***" << endl << endl;
cout <<"Pro navrat stiskni libovolnou klavesu" << endl << endl;
system ("pause");
system ("cls");
return main();
}
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)" << endl;
break;
Takhle může být?
Bald3rr napsal:
To ifeeltipsy : Teď tě nějak nechápu, tu tvojí podmínku na záporná čísla tam máš 100x?case 1:
cout << "Zadej dlane, ktere prevedu na centimetry : ";
double dlane;
dlane = 0;
cin >> dlane;
do { // Tady máš připsanou tu kontrolu mezi case a break
if(kontrolavstupu())
vstup = true;
else
vstup = false;
} while (!vstup);
if (dlane < 0)
{
cerr <<"*** Nesmis vkladat zaporna cisla ***" << endl << endl;
cout <<"Pro navrat stiskni libovolnou klavesu" << endl << endl;
system ("pause");
system ("cls");
return main();
}
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)" << endl;
break;
Takhle může být?
šlo by všechno nadefinovat do tohoto jednoho case?
Bald3rr napsal:
To ifeeltipsy : Teď tě nějak nechápu, tu tvojí podmínku na záporná čísla tam máš 100x?
case 1:
cout << "Zadej dlane, ktere prevedu na centimetry : ";
double dlane;
dlane = 0;
cin >> dlane;
do { // Tady máš připsanou tu kontrolu mezi case a break
if(kontrolavstupu())
vstup = true;
else
vstup = false;
} while (!vstup);
if (dlane < 0)
{
cerr <<"*** Nesmis vkladat zaporna cisla ***" << endl << endl;
cout <<"Pro navrat stiskni libovolnou klavesu" << endl << endl;
system ("pause");
system ("cls");
return main();
}
cout << dlane << " dlani je " << dlane*8 << " cm (1 m = 8 dlani, zadane cislo * 8)" << endl;
break;
Takhle může být?
můj program je právě konzolová aplikace a já v programování nejsem zrovna zběhlý, těch case je tam mnoho a já bych to potřeboval asi nadefinovat konkrétně do každého case...
kousek programu vypadá takto
if(menu_prevod == 7)
{
cout << "Menu Sily:" << endl << endl << endl;
cout << "01 ... Kilopond na newtony" << endl;
cout << "02 ... Pound-force na newtony" << endl;
cout << "88 ... Zpet" <<endl;
cout << "99 ... Konec" << endl << endl;
cout << "Vyber si polozku z menu a zadej cislo dle vyberu:"<< endl;
int menu_sily;
cin >> menu_sily;
system ("cls");
switch(menu_sily)
{
case 1:
cout << "Zadej kilopondy, ktere prevedu na newtony : ";
double kilopondy;
kilopondy = 0;
cin >> kilopondy;
if (kilopondy < 0)
{
cerr <<"*** Nesmis vkladat zaporna cisla ***" << endl << endl;
cout <<"Pro navrat stiskni libovolnou klavesu" << endl << endl;
system ("pause");
system ("cls");
return main();
}
cout << kilopondy << " kilopondu je " << kilopondy*9.80665 << " N (1 N = 9.80665 kilopondu, zadane cislo * 9.80665)" << endl;
break;
case 2:
cout << "Zadej pound-force, ktere prevedu na newtony : ";
double pound_force;
pound_force = 0;
cin >> pound_force;
if (pound_force < 0)
{
cerr <<"*** Nesmis vkladat zaporna cisla ***" << endl << endl;
cout <<"Pro navrat stiskni libovolnou klavesu" << endl << endl;
system ("pause");
system ("cls");
return main();
}
cout << pound_force << " pound-forcu je " << pound_force*4.44822 << " N (1 N = 4.44822 pound-forcu, zadane cislo * 4.44822)" << endl;
break;
case 88:
return main ();
break;
case 99:
cout << "Pro ukonceni stisknete libovolnou klavesu" << endl;
return 0;
break;
default:
cout << "Spatny vyber" << endl;
return main();
break;
}
}
zkoušel jsem do toho case také vložit:
if (!isdigit(dlane))
{
cerr <<"Tohle neni cislo" << endl;
cin.clear();
cin.get();
return main();
}
když zadám jedno písmeno tak ho opraví a napíše ale když už zadám číslo tak ho považuje taky za písmeno a vyhodí chybnou hlášku taktéž
jsem rád že se mi aspoň někdo snaží pomoct... děkuju mockrát :-)
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žení videa
Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
Uživatelé prohlížející si toto vlákno
Uživatelé on-line: 0 registrovaných, 75 hostů
Podobná vlákna
Vkládání obrázků a ukládání cesty do db error — založil Karel
Zákaz kopírování. — založil ospaly.stanislav
QT error: Error code 62097 — založil QtProgramming
Zakaz scroolovania stranky — založil marioff
Moderátoři diskuze