Mě to de a jim ne – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Mě to de a jim ne – C / C++ – Fórum – Programujte.comMě to de a jim ne – C / C++ – Fórum – Programujte.com

 

Jan Říha0
Newbie
13. 6. 2007   #1
-
0
-

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;
}

Nahlásit jako SPAM
IP: ...–
The 17th Cohort
DeaLer+2
Hero
13. 6. 2007   #2
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Jura
~ Anonymní uživatel
637 příspěvků
13. 6. 2007   #3
-
0
-

To DeaLer:
Tak to se, ale pleteš. Tohle je čisté C++, žadný managed kód.

To Ymemgirei:
To je dost málo informací. Co hlasí systém? V čem to kompiluješ? Jaké prostředí?

Nahlásit jako SPAM
IP: ...–
DeaLer+2
Hero
13. 6. 2007   #4
-
0
-

To Jura: OK, jen jsem hádal

Nahlásit jako SPAM
IP: ...–
Dušan Janošík | web: djanosik.cz, @djanosik
Jan Říha0
Newbie
14. 6. 2007   #5
-
0
-

To Jura: Mam Dev-C++ v tom to píšu i kompiluju. Ale některejm lidem co to pošlu se to prostě zavře a nic jim to nenapíše.

Nahlásit jako SPAM
IP: ...–
The 17th Cohort
survik1
~ Moderátor
0
Posthunter
14. 6. 2007   #6
-
0
-

To Ymemgirei: Některejm nebo všem? Tobě to funguje? Hlásí něco kompilátor?

Nahlásit jako SPAM
IP: ...–
Život je jen hra, která se nedá vyhrát.
jinaq0
Newbie
14. 6. 2007   #7
-
0
-

To Ymemgirei: Těm lidem, co jim to nejede, se to zavře hned, nebo se jich to zeptá na heslo a pak se to zavře a nic nenapíše??

Nahlásit jako SPAM
IP: ...–
Jan Říha0
Newbie
14. 6. 2007   #8
-
0
-

To jinaq: Zeptá se jich to na heslo a ať napíšou cokoliv, tak se jim to zavře.
To survik1: Mě to funguje a některejm lidem taky. Kompilátor hlásí: Done.

Nahlásit jako SPAM
IP: ...–
The 17th Cohort
Jura
~ Anonymní uživatel
637 příspěvků
14. 6. 2007   #9
-
0
-

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;
}

Nahlásit jako SPAM
IP: ...–
Jan Říha0
Newbie
14. 6. 2007   #10
-
0
-

To Jura: Ty vole ty seš borec. Já to sice nechápu, ale když to bude šlapat tak to bude good. Ale stejně bych to rád pochopil.

Nahlásit jako SPAM
IP: ...–
The 17th Cohort
Jura
~ Anonymní uživatel
637 příspěvků
14. 6. 2007   #11
-
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;
}

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
14. 6. 2007   #12
-
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 ;)

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
Jura
~ Anonymní uživatel
637 příspěvků
14. 6. 2007   #13
-
0
-

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..

Nahlásit jako SPAM
IP: ...–
Peter D.0
Expert
14. 6. 2007   #14
-
0
-

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;
}

Nahlásit jako SPAM
IP: ...–
Program nemusi fungovat rychle, staci ze funguje dostatecne rychle.
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žit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 41 hostů

Moderátoři diskuze

 

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