IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Help !

Aktivity
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
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
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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
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
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
Tvůrce
Avatar
Lukáš Hruda: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
23.8.2014 15:50
Avatar
Odpovídá na Lukáš Hruda
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
Tvůrce
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
23.8.2014 15:57
Miluji {}, proto dělám v C#.
Avatar
tomisoka
Tvůrce
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
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
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na tomisoka
Lukáš Hruda: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
23.8.2014 16:04
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na Lukáš Hruda
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
Tvůrce
Avatar
Odpovídá na TrollKill
mkub:23.8.2014 18:13

trosku zly nazov vlakna ;)

 
Nahoru Odpovědět
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
23.8.2014 18:19
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.