C++ problém s vyhodnocením písmenka podmínkou if – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

C++ problém s vyhodnocením písmenka podmínkou if – C / C++ – Fórum – Programujte.comC++ problém s vyhodnocením písmenka podmínkou if – C / C++ – Fórum – Programujte.com

 

25. 8. 2017   #1
-
0
-

Zdravím,Dneska jsem si chtěl udělat jednoduchý program, ale narazil jsem na problém. Jsem dalo by se říct začátečník. Na internetu jsem hledal, ale tuto konkrétní věc jsem nenašel. Tuším, že to napsané všechno úplně špatně není jen někde dělám drobnou chybu a netuším kde. Od programu očekávám to, že pokud zadám přesně určité slovo například(ano, ne, ahoj), tak se provede nějaká reakce pomocí příkazu cout.Nejdříve jsem to zkoušel takhle.

#include <iostream>

using namespace std;

int main(){
char a;
cin>>a;
if(a=='ano'){
cout<<"tohle funguje"<<endl;
}

}
Potom mi došlo, že je to blbost a pravděpodobně to slovo(ano,ne.ahoj) budu muset napasovat do pole a potom vyhodnotit podmínku. Tohle mi ale bohužel nefunguje ani s číslem.

Příklad

#include <iostream>
using namespace std;
int main(){

char pole[3];

for(int a=0;a<3;a++){
cin>>pole[a];
}
 

for(int b=0;b<3;b++){
cout<<pole[b];
}


if(pole[2]==2){
cout<<"tohle funguje"<<endl;
}
}
Děkuji za jakoukoli užitečnou pomoc. Doufám, že mám aspoň dobrou myšlenku pokud ne aspoň se mi to díky vám povede vymyslet.

Nahlásit jako SPAM
IP: 82.99.180.–
gna
~ Anonymní uživatel
1891 příspěvků
25. 8. 2017   #2
-
0
-

V C++ je pro řetězce třída string, která věci dost zjednodušuje.

string slovo;                                                                   
cin >> slovo;                                                                   
if (slovo == "ano")                                                             
	cout << "tak se svlikni" << endl;
Nahlásit jako SPAM
IP: 213.211.51.–
Doomista+1
Stálý člen
29. 8. 2017   #3
-
0
-

Odpovědí na tvou otázku bude libovolný tutoriál o polích, ale zkusím to vzít zkratkovitě.

char není řetězec, char je znak. Jeden jediný znak. Pokud uděláš char slovo[3], tak jsi vytvořil pole tří znaků, anebo jsi vytvořil řetězec o délce dva znaky. Proč dva? Na konci řetězce musí být speciální symbol '\0', který zajistí, že počítač pozná, že řetězec končí.

Dejme tomu, že si uděláš slovo[128], což je dost velké pole snad na každé existující slovo. Potom můžeš udělat

cin >> slovo;

Nicméně C/C++ neumí porovnávat pole s polem. Podmínka slovo == "tohle funguje" prostě nedává smysl, protože C/C++ neví, co s tím má dělat. Musel bys použít funkci strcmp a testovat strcmp(slovo, "tohle funguje") == 0

To ale není jediný problém. Mezera je oddělovač slov, takže pokud budeš chtít do slovo narvat řetězec "tohle funguje", tak se ti to nepodaří, protože se tam vloží jen "tohle" a "funguje" zůstane viset v systémových bufferech a bude čekat na zpracování.

Třída string, kterou navrhnul gna, řeší většinu těch problémů, kromě té mezery na vstupu. Nicméně fungovat bude jenom v C++. Mezera by asi šla ošetřit escape backslashem anebo pomocí cin.getline

Nahlásit jako SPAM
IP: 78.102.108.–
Na vše stačí iostream...
KIIV
~ Moderátor
+43
God of flame
29. 8. 2017   #4
-
0
-

A v neposledni rade je dobre znat rozdil mezi  "retezcem" a 'z' 'n' 'a' 'k' 'e' 'm'. Takove 'ano' sice projde pres kompilator (mozna aspon s warningem), ale je to spise cislo (a jeste zavisle na byteorderu).

Nahlásit jako SPAM
IP: 217.196.214.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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, 108 hostů

Podobná vlákna

Problem s podmínkou v c++ — založil riegger

Problém s podminkou — založil Coal_Asasin

Problém s podmínkou — založil Dominika

Problém s podmínkou if — založil k2k21

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ý