Visualizza la versione completa : [C] errore strano (probabilmente da niubbio)
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:
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);
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;
}
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
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.
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)....
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, 19: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 ...
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
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 "[]"