Podmínka IF – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Podmínka IF – C / C++ – Fórum – Programujte.comPodmínka IF – C / C++ – Fórum – Programujte.com

 

pawlik0
Grafoman
14. 9. 2008   #1
-
0
-

Protože jsem slyšel, že Python je bez vyššího jazyku docela k ničemu - výhoda Pythonu je právě v jeho kombinovatelnosti s jinými jazyky - Začal jsem se učit C++. Proto upozorňuju, že jsem začátečním, a 'nic nevim'. Udělal jsem jednoduchý prográmek, který bohužel nefunguje jak má, chyba je v podmínce IF. Nikdy nedostanu funkci correct().

#include <iostream>

using namespace std;

void correct();

int main(){
const char correctpswd[12] = "programujte";
char writedpswd[12];

cout << "Enter password: ";
cin >> writedpswd;

if(correctpswd == writedpswd)
{
correct();
}
else
{
cout << "Heslo neni napsane spravne, " << correctpswd << " != " << writedpswd << ". Enterem ukoncis program.";
}

cin.get();
cin.get();
return 0;
}

void correct(){
cout << "Napsal jsi heslo spravne.";
cin.get();
return;
}

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
Chrasty
~ Redaktor
+4
Posthunter
14. 9. 2008   #2
-
0
-

Hlavní důvod, proč odpovídám je ten, že pasiv od "write" není "writed", ale "written"! Fuj, úplně mi přeběhl mráz po zádech :-)

C++ sice nedělám, ale stejně nemůžu pochopit pár věcí:

1) K čemu je na začátku "void correct();"
2) Proč v metodě, která nic nevrací (void) píšeš return;?

Jestli je to obojí správně, tak mi prosím někdo trochu offtopic vysvětlete proč, nechápu to, aspoň se něčemu přiučím.

Nahlásit jako SPAM
IP: 193.179.196.–
pawlik0
Grafoman
14. 9. 2008   #3
-
0
-

To Chrasty :

written, no jo... až budu dělat program, kde v tom zdrojáku bude pracovat tisíce lidí, možná tam dam written :) ale pro tohle to vystačí...

1) To jsou prototypy... jestli jsem to dobře pochopil.
2) je to nepovinné, ale to neznamená, že to tam nesmí být :).
Více: http://programujte.com/index.php?akce=clanek&cl=2005041410-c++-6-lekce - 6. lekce :)

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
meneltharion0
Návštěvník
14. 9. 2008   #4
-
0
-

V IFu neporovnávaš řetězce samotné, ale ukazatele na dva řetězce (které se nerovnají, protože se nenachází na stejném místě v paměti). Pro porovnání je potřeba použít složitější algoritmus, používá se např. funkce strcmp, případně třída std::string (ta tě zatím trápit nemusí).

Nahlásit jako SPAM
IP: 212.96.176.–
pawlik0
Grafoman
14. 9. 2008   #5
-
0
-

To Chrasty : A navím, hledáme chybu tam, kde není, nebo možná je, ale není to ta chyba. protože correctpswd != writedpswd, i když jsou obě "programujte". Vykoná se else.

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
Chrasty
~ Redaktor
+4
Posthunter
14. 9. 2008   #6
-
0
-

To pawlik : To je zajímavé, díky, tak jsem aspoň o něco chytřejší :-)

Nahlásit jako SPAM
IP: 193.179.196.–
yaqwsx+9
Posthunter
14. 9. 2008   #7
-
0
-

Na začátek by jsi měl vědět, že v C++ je pole reprezentováno jako ukazatel - tzn ty neporovnáváš obsah řetězců, ale pouze jejich adresy a ty jsou vždy rozdílné.
Pokud nechces použít porovnánací f-cu C, můžeš to zkusit předělat na mnohem lepší typ string, u kterého porovnávání funguje:
Nahraď

const char correctpswd[12] = "programujte";

char writedpswd[12];

tímto:


#include <string>

const std::string correctpswd = "programujte";
std::string writedpswd;



EDIT: zase jsem pomalej...

Nahlásit jako SPAM
IP: 85.160.82.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Bald3rr0
Super člen
14. 9. 2008   #8
-
0
-

To pawlik : Jak řekl meneltharion, můžeš použít fci strcmp();, která porovnává dva řetězce. a vrací int. Pokud je int < 0, znamená to, že je 1. řetězec abecedně před 2.. Pokud je int > 0, naopak. Pokud je int == 0, řetězce jsou shodné.

Takže porovnání by mohlo vypadat nějak takto:

if(strcmp(correctpswd, writedpswd) == 0);

correct();

Nebo pomocí cyklu for znak po znaku:
bool rightpswd = true;

for(int i = 0; i < strlen(correctpswd); i++) {
if(correctpswd[i] != writedpswd[i])
rightpswd = false;
}
if(rightpswd)
correct();


EDIT: Ještě pomalejší :[

Nahlásit jako SPAM
IP: 82.100.0.–
pawlik0
Grafoman
14. 9. 2008   #9
-
0
-

To meneltharion : Děkuju... už to jde :-) to mě nenapadlo... že porovnávam jen ukazatele. tak ještě jednou díky.

Edit: To jsem nečekal takovou hromadnou reakci :)

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
pawlik0
Grafoman
14. 9. 2008   #10
-
0
-

Tak vám ukážu za vaši ochotu můj první prográmek v C++ po Hello world :)

#include <iostream>

using namespace std;

void correct();

int main(){
const char correctpswd[12] = "programujte";
char writedpswd[12];

cout << "Enter password(pass:programujte): ";
cin >> writedpswd;

if(strcmp(correctpswd,writedpswd)==0)
{
correct();
}
else
{
cout << "Heslo neni napsane spravne, " << correctpswd << " != " << writedpswd << ". Enterem ukoncis program.";
}

cin.get();
cin.get();
return 0;
}

void correct(){

struct poznamky {
char nadpis[25];
char value[55];
};

poznamky pozn1 = { "Empty", "Zatim jste sem nic nenapsal." };
poznamky pozn2 = { "Empty", "Zatim jste sem nic nenapsal." };
poznamky pozn3 = { "Empty", "Zatim jste sem nic nenapsal." };

int com;
char nadpisik[25] = "isnull";
char valuiik[55] = "isnull";

cout << "Napsal jsi heslo spravne. Vitej u svych poznamek!\n" << endl;

start: ;

cout << "1) " << pozn1.nadpis << ": " << pozn1.value << endl;
cout << "2) " << pozn2.nadpis << ": " << pozn2.value << endl;
cout << "3) " << pozn3.nadpis << ": " << pozn3.value << endl;

cout << endl << "Insert command [Konec: 0, Edit podle cisla poznamky]: _\b";
cin >> com;
cin.get();
if(com>0 && com<4){
cout << "\nNadpis: ";
cin.getline(nadpisik, 25);
cout << "Value: ";
cin.getline(valuiik, 55);
cout << endl;
if(com==1){
strcpy(pozn1.nadpis, nadpisik);
strcpy(pozn1.value, valuiik);
}
if(com==2){
strcpy(pozn2.nadpis , nadpisik);
strcpy(pozn2.value , valuiik);
}
if(com==3){
strcpy(pozn3.nadpis , nadpisik);
strcpy(pozn3.value , valuiik);
}
goto start;
}

return;
}


Enter password(pass:programujte): programujte

Napsal jsi heslo spravne. Vitej u svych poznamek!

1) Empty: Zatim jste sem nic nenapsal.
2) Empty: Zatim jste sem nic nenapsal.
3) Empty: Zatim jste sem nic nenapsal.

Insert command [Konec: 0, Edit podle cisla poznamky]: 1

Nadpis: Programujte
Value: Zkouknout prispevky na programujte.com

1) Programujte: Zkouknout prispevky na programujte.com
2) Empty: Zatim jste sem nic nenapsal.
3) Empty: Zatim jste sem nic nenapsal.

Insert command [Konec: 0, Edit podle cisla poznamky]: 2

Nadpis: Programujte
Value: Napsat tenhle nesmysl na programujte.com

1) Programujte: Zkouknout prispevky na programujte.com
2) Programujte: Napsat tenhle nesmysl na programujte.com
3) Empty: Zatim jste sem nic nenapsal.

Insert command [Konec: 0, Edit podle cisla poznamky]: 0


Ještě by to chtělo udělat ukládání... :) ale tohle mi jako Hello world II. stačí. :)

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
Bald3rr0
Super člen
14. 9. 2008   #11
-
0
-

Jediné co se mi na tom "nelíbí" jsou ty 3 podmínky při zjišťování, který "command" byl zadán. Použil bych namísto 3x if, switch :)

Nahlásit jako SPAM
IP: 82.100.0.–
pawlik0
Grafoman
14. 9. 2008   #12
-
0
-

To Bald3rr : Ono toho je víc, někdo by mohl vytknout příkaz goto a někdo by mohl vytknout proměnnou valuiik :) Ale jako Hello world II. to stačí :)

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
Santas0
Věrný člen
14. 9. 2008   #13
-
0
-

na goto si fakt nezvykaj

Nahlásit jako SPAM
IP: 195.91.55.–
http://psandtner.sk/blog
pawlik0
Grafoman
14. 9. 2008   #14
-
0
-

To Santas : Vím... V Pythonu jsem taky žádný goto neměl ... :)

Nahlásit jako SPAM
IP: 84.42.151.–
Sa Nata A Na. Howgh
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, 73 hostů

Podobná vlákna

Podmínka if — založil Jan

IF A ELSE - podmínka — založil Morello

C++ podmínka — založil Selfer

Podminka — založil lolkohrad

Podminka — založil Atheo

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ý