Avatar
TrollKill
Člen
Avatar
TrollKill:

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:
#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):

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:

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:

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):

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
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):

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):

//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):

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):

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:

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):

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:

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):

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):

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):

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:

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:

trosku zly nazov vlakna ;)

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

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:

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.