Diskuze: Help !

C a C++ C a C++ Help !

Aktivity (1)
Avatar
TrollKill
Člen
Avatar
TrollKill:23.8.2014 15:13

Mam kod v C-cku , ktory si vypita heslo od uzivatela a ked je spravne tak vypise "Uspech !!!" len nefunguje a neviem preco.
Dokaze niekto pomoct?

char *heslo = "ahoj";
 char *zadane = "";
 printf(">>Zadaj heslo:\n");
 /*ak je heslo spravne*/
 scanf("%c",&zadane);
 if (zadane = heslo)
 {
     printf("Uspech !!!");
 }
 
Odpovědět  -1 23.8.2014 15:13
Avatar
Odpovídá na TrollKill
Neaktivní uživatel:23.8.2014 15:23
#include <string.h>

char *heslo = "ahoj";
char *zadane = "";
printf(">>Zadaj heslo:\n");
/*ak je heslo spravne*/
scanf("%s",&zadane);
if (strcmp(zadane, heslo))
{
   printf("Uspech !!!");
}
Editováno 23.8.2014 15:25
Nahoru Odpovědět 23.8.2014 15:23
Neaktivní uživatelský účet
Avatar
Milan Žmourek(milaz):23.8.2014 15:26

To snad nemyslíš vážně ne? Jestli se budete psát na něco takového hned jak to nejde tak z vás nikdy dobří programátoři nebudou.. Programování je o tom hledat a poučovat se z chyb a hledat na googlu... Takhle se nikam nedostanete.
Jednou jsem dělal program v konzoli který vezme prvních 5 písmen z inputu a byly tam nějaké chyby které jsel hledal asi hodinu!
Proč je heslo jako char?
Pro porovnavani v ifu se používá ==. = se používá na přiřazování ;)
Jestli je to V C jinak než v moderních jazycích tak se všem omlouvám ;)

Editováno 23.8.2014 15:28
Nahoru Odpovědět  +4 23.8.2014 15:26
Miluji {}, proto dělám v C#.
Avatar
Člen
Člen
Avatar
Člen:23.8.2014 15:30

Chyba je v porovnani hodnot premennych... Na porovnanie sa nepouziva "=" ale "==" :)

char *heslo = "ahoj";
        char *zadane = "";
        printf(">>Zadaj heslo:\n");
        /*ak je heslo spravne*/
        scanf("%c",&zadane);
        if (zadane == heslo)
        {
    printf("Uspech !!!");
        }
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 23.8.2014 15:30
...
Avatar
Člen
Člen
Avatar
Odpovídá na Milan Žmourek(milaz)
Člen:23.8.2014 15:31

btw "==" ma vyznam "rovna sa" a "=" sluzi na priradenie ;)

Nahoru Odpovědět 23.8.2014 15:31
...
Avatar
Odpovídá na Člen
Milan Žmourek(milaz):23.8.2014 15:32

Vždyť jsem to psal

Pro porovnavani v ifu se používá ==. = se používá na přiřazování
Nahoru Odpovědět 23.8.2014 15:32
Miluji {}, proto dělám v C#.
Avatar
Odpovídá na Milan Žmourek(milaz)
Milan Žmourek(milaz):23.8.2014 15:34

No mohl jsem vynechat to v ifu..

Nahoru Odpovědět  +2 23.8.2014 15:34
Miluji {}, proto dělám v C#.
Avatar
Odpovídá na Člen
Milan Žmourek(milaz):23.8.2014 15:46

Můžu se zeptat proč tam je: char *heslo = "ahoj"; a ne string heslo = "ahoj";
?

Nahoru Odpovědět 23.8.2014 15:46
Miluji {}, proto dělám v C#.
Avatar
Odpovídá na Člen
Milan Žmourek(milaz):23.8.2014 15:46

//DOUBLE

Editováno 23.8.2014 15:46
Nahoru Odpovědět 23.8.2014 15:46
Miluji {}, proto dělám v C#.
Avatar
Lukáš Hruda (Luckin):23.8.2014 15:50

Chyba byla především v tom, že řetězce ve stylu C nelze porovnávat pomocí žádného operátoru (= ani ==), == porovná pouze adresy prvních znaků, pro porovnání řetězců se dá použít právě například funkce strcmp, ta ale při shodě řetězců vrací nulu, tudíž by před ní měla být negace nebo porovnání s nulnou. Je tam ale pořád ještě jedna dost zásadní chyba.

 
Nahoru Odpovědět  +2 23.8.2014 15:50
Avatar
Odpovídá na Lukáš Hruda (Luckin)
Milan Žmourek(milaz):23.8.2014 15:51

Je super, že jsi mu jí neřekl :P(To není sarkasmus)

Nahoru Odpovědět 23.8.2014 15:51
Miluji {}, proto dělám v C#.
Avatar
tomisoka
Redaktor
Avatar
tomisoka:23.8.2014 15:54

Hrubky! Jestli nad tím takto přemýslíš tak začni s lehčími jazyky (např. Java/C#) a ne s C

char heslo[] = "ahoj";
char zadane[1024]; // nebo malloc - musí být allokován
printf(">>Zadaj heslo:\n");
scanf("%s",zadane);//načítáš "string" ne jeden znak a %s
//warning: format ‘%s’ expects argument of type ‘char *’ - to byla další chyba...
if (!strcmp(zadane, heslo)){//pokud dobře vrací nulu
        printf("Uspech !!!\n");
}
Editováno 23.8.2014 15:56
 
Nahoru Odpovědět 23.8.2014 15:54
Avatar
Odpovídá na tomisoka
Milan Žmourek(milaz):23.8.2014 15:57

To C je ale záludné :D

TrollKill : Opravdu radši přejdi na C#. Je to moderní a rychlý jazyk. + Na netu se válí spousta tutoriálů.

Nahoru Odpovědět  +1 23.8.2014 15:57
Miluji {}, proto dělám v C#.
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na Milan Žmourek(milaz)
tomisoka:23.8.2014 15:58

Protože C nezná typ String a používá se místo něj pole znaků

 
Nahoru Odpovědět  +2 23.8.2014 15:58
Avatar
Milan Žmourek(milaz):23.8.2014 15:59

Teda pokud C nebudete /nemáte ve škole. Ale tam se stejně většinou učí jen základy takže to C# je stejně dobrá volba.(Kolik jazyků umíš, tolikrát jsi programátor :P )

Nahoru Odpovědět 23.8.2014 15:59
Miluji {}, proto dělám v C#.
Avatar
Odpovídá na tomisoka
Milan Žmourek(milaz):23.8.2014 15:59

Programování bez stringu? WOW :D Díky za odpověď.

Nahoru Odpovědět 23.8.2014 15:59
Miluji {}, proto dělám v C#.
Avatar
Odpovídá na tomisoka
Lukáš Hruda (Luckin):23.8.2014 16:04

Ach jo, já chtěl aby na tu chybu přišli samy a ty jim všechno vykecáš :D

 
Nahoru Odpovědět  +1 23.8.2014 16:04
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na Lukáš Hruda (Luckin)
tomisoka:23.8.2014 16:10

Já jsem si tvůj komentář četl až když jsem to napsal, nějak mě tohle nenapadlo :( a zrovna jsem pracoval s C tak jsem si mohl být jist správností svého řešení.

 
Nahoru Odpovědět 23.8.2014 16:10
Avatar
mkub
Redaktor
Avatar
Odpovídá na TrollKill
mkub:23.8.2014 18:13

trosku zly nazov vlakna ;)

 
Nahoru Odpovědět  -2 23.8.2014 18:13
Avatar
Odpovídá na mkub
Michal Žůrek (misaz):23.8.2014 18:19

nesouhlasím, je hodně špatný.

Nahoru Odpovědět  +3 23.8.2014 18:19
Nesnáším {}, proto se jim vyhýbám.
Avatar
TrollKill
Člen
Avatar
TrollKill:24.8.2014 11:57

Aka diskusia z jedneho kodu :X

 
Nahoru Odpovědět 24.8.2014 11:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 21 zpráv z 21.