Když zkompiluju kód a vytvoří mi to exe soubor, tak ho otevřu a normálně funguje, ale když to někomu pošlu pro zábavu, tak mu to nefunguje. Konkrétně se jedná o tento kód na heslo z lekce 3.
#include <iostream>
using namespace std;
int main()
{
int heslo;
cout << "Zadejte heslo: ";
cin >> heslo;
if (heslo == 1593)
cout << "Tajne slovo je vobrubnik";
else
cout << "Spatne, preji hezky den.";
cin.get();
cin.get();
return 0;
}
Fórum › C / C++
Mě to de a jim ne
To Ymemgirei: připomíná mi to C++/CLI, resp. kombinaci manage a unmanaged kódu ... pokud tomu tak je, tak na koncové mPC potřebuješ .NET Framework
To Jura: OK, jen jsem hádal
To Ymemgirei:
Patrně ve stupní frontě zůstavá více než jeden znak, takže ty znaky sežere cin.get(). Totiž konzolové programy bych raději pouštěl přes konzoli - díky tomu můžeš vidět i výpisy, které se provádí při ukončení programu. Takže jedním řešením může být:
#include <iostream>
using namespace std;
int main()
{
int heslo;
cout << "Zadejte heslo: ";
cin >> heslo;
if (heslo == 1593)
cout << "Tajne slovo je vobrubnik";
else
cout << "Spatne, preji hezky den.";
while(cin.get() != '\n') ; // vyprazdní vstupní frontu
cin.get();
return 0;
}
To Ymemgirei:
To není žádná věda, pořád to patří mezi naprosté základy. Jde jen o to si uvědomit, jak "funguje" objekt cin(to je to, čím načítáš). Objekt cin načítá znaky ze vstupu(to je ta vstupní fronta) po PRVNÍ BÍLÝ znak(bíle znaky jsou napr. mezera, tabulator, enter,...). Tuhle podmínku je velice dobré si uvědomit. No, a když uživatel něco píše na klávesnici, tak se mu(obvykle) ty písmena zobrazují na konsoli, v takovém pořádí v jakém je napsal - tohle zařídí ta fronta(je to stejné jako v obchodě, zařadíš se do fronty a čekáš až na tebe příjde řada, čili zjednodušeně - kdo první přijde, ten bude první obsloužen, říká se tomu FIFO - first in first out). No a jakmile uživatel něco dopíše, zmáčkne enter, tak cin načítá a načíta pěkně písmenko po písmenku dokud nenarází na bílý znak. Jenže tyhle zbylé bílé a další znak(y) nikam nezmizí a zůstanou ve vstupní frontě, tzn. pokud tam něco zůstane, tak další načítaní načte to, co tam zbylo a tím pádem se k uživatelově vstupu už nedostaneš. Takže aby mohlo další načítání proběhnout korektně, musí se fronta vyprázdnit a právě k tomu slouží ta smyčka while(cin.get() != '\n'); -> cin.get() žere ze vstupu naprosto všechno, bez ohledu na to jestli je to bilý znak nebo ne. A načítaš, tak dlouho, dokud se právě vybraný znak nerovná novému řádku(tedy Enteru).
#include <iostream>
using namespace std;
int main()
{
int heslo;
cout << "Zadejte heslo: ";
cin >> heslo; // zadám například 4523__(ty podtržítka jsou mezery)
if (heslo == 1593)
cout << "Tajne slovo je vobrubnik";
else
cout << "Spatne, preji hezky den.";
cin.get(); // sežere jednu mezeru
cin.get(); // sežere druhou mezeru - tím pádem se uživatel vůbec nedostane k možnosti cokkoliv zadat
return 0;
}
2 Ymemgirei: Už to funguje ? (myslim že nie ;) )
ide o to že načítavaš číslo. Pokiaľ niekto zadá napr "abc" vyhodí to výnimku, ktoru nespracuješ, teda program ihneď skončí ;)
skus tomu komu posielaš ten program povedať to heslo ;)
To mephi:
Výjimku to zcela jistě nevyhodí, ale nastaví se fail bit streamu. Nicméně dobrý postřeh, když jsem viděl kód, tak mě vůbec nenapadlo, zadavát něco jiného než číslo. Takže jestli jsem Ymemgireia mystifikoval, tak se omlouvám..
hop, sry naozaj to vynimku nehádže, musel som si to testnuť. Len pre zaujimavosť:
#include <iostream>
using namespace std;
int main()
{
int a;
cout << "vloz cislo:";
cin >> a;
if (cin.fail())
{
cout << "Vstup zlyhal!\n";
}
else
{
cout << "O.K.\n";
}
system("PAUSE");
return 0;
}
Zjistit počet nových příspěvků
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa































Uživatelé prohlížející si toto vlákno
Podobná vlákna
Pořadí prováděných metod — založil Honza228
Pomozte mi prosim s precitanim tochto programu — založil quentineros
PHP nebo JS developer pro brněnský start-up — založil roman.zigo
URL se samo deformuje — založil fix
Moderátoři diskuze
TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Newbie

Nahlásit jako SPAM
IP: ...–
Hero
Posthunter
Expert

