PDA

Visualizza la versione completa : [C] errore strano (probabilmente da niubbio)


V0D
05-04-2004, 19:26
Non ho finito l'altro post ed eccomi a voi con un altro problemuccio :D stavo facendo delle prove, quando mi sono imbattuto in un errore strano (per me). Allora, io ho questa porzione di codice C:


#include <stdio.h>

int main(){

char ciao[10];

scanf("%s", &ciao);

if (ciao == "dici")
printf ("Complimenti hai superato un esame");

else if (ciao == "quindi")
printf ("Devi sostenere l'orale per questo esame");

else
printf ("Non hai superato l'esame");

return 0;

}

Il problema è che mi esegue direttamente l'istruzione dell'else e non so perchè :master:

kNemo
05-04-2004, 19:38
Nella scanf() , se usi le stringhe non ci va' '&'...
quindi diventa scanf("%s", stringa); ma non penso sia il problema....

Invece di scanf() per le stringhe usa gets() perche' scanf() non prende gli spazi....

gets (stringa);

kNemo
05-04-2004, 19:40
Sono un pirla anchio perche' non lo visto subito...
ma se voui confrontare due stringhe non puoi usare '=='
ma devi usare la funzione di libreria
strcmp()...



#include <string.h>
#include <stdio.h>

int main() {
char str[10];

printf ("Inserisci una Stringa : ");
gets (str);

if (!strcmp(str, "dici")) {
printf ("Complimenti hai superato un esame");
} else if (!strcmp(str, "quindi")) {
printf ("Devi sostenere l'orale per questo esame");
} else {
printf ("Non hai superato l'esame");
}

return 0;
}

pdpmpd
05-04-2004, 19:43
questo tipo di confronto non lo puoi fare :nonono:
ricorda che la stringa è un'array di caratteri, non un'unica variabile.
usa la funzione strcmp (string compare), oppure scriviti da te una funzione che controlla ogni singolo carattere della stringa.



#include <stdio.h>
#include <string.h>

int main(){
char ciao[10];
scanf(" %s", &ciao);
if (strcmp(ciao,"dici"==0))
printf ("Complimenti hai superato un esame\n");
else if (strcmp(ciao,"quindi")==0)
printf ("Devi sostenere l'orale per questo esame\n");
else
printf ("Non hai superato l'esame\n");
return 0;
}
:ciauz:

[edit]- ma quanto sono lento oggi :jam: maledizione

pdpmpd
05-04-2004, 19:50
Originariamente inviato da kNemo
Nella scanf() , se usi le stringhe non ci va' '&'...
quindi diventa scanf("%s", stringa); ma non penso sia il problema....

Invece di scanf() per le stringhe usa gets() perche' scanf() non prende gli spazi....

gets (stringa);

:confused: :dottò: :master:



Never use gets(). Because it is impossible to tell with-
out knowing the data in advance how many characters gets()
will read, and because gets() will continue to store char-
acters past the end of the buffer, it is extremely danger-
ous to use. It has been used to break computer security.
Use fgets() instead.

kNemo
05-04-2004, 20:00
Caspio non lo sapevo...
comunque la scanf() non prende le parole dopo gli spazi. :D
poi nella scanf() non ci va' '&' anche se funziona ugualmente... :D
perche' gli dai gia' il puntatore alla prima componente (che e' gia' un indirizzo)....

pdpmpd
05-04-2004, 20:05
Originariamente inviato da kNemo
Caspio non lo sapevo...
comunque la scanf() non prende le parole dopo gli spazi. :D
poi nella scanf() non ci va' '&' anche se funziona ugualmente... :D
perche' gli dai gia' il puntatore alla prima componente (che e' gia' un indirizzo)....

questione di gusti :D

Lardoman
05-04-2004, 20:07
Ma perchè tutti includono string.h per usare strcmp () ?? :master: Nn ho ancora trovato uno che nn lo fa....

Eppure strcmp () è dichiarato anche in stdio.h ...

kNemo
05-04-2004, 20:09
io la includo perche' e' in string.h :D
ma se in alcuni compilatori (dev C++) e' in stdio.h non vero perche' non dovrei includerla ugualmente...

per me' e' una questione di standard

pdpmpd
05-04-2004, 20:10
ah, comunque con scanf si può evitare il salto degli spazi con l'opzione %c indicando il numero di caratteri da leggere oppure con i set "[]"

Loading