Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Comparazione in IF
Forum - C/C++ - Comparazione in IF

Avatar
PeppEX185 (Normal User)
Newbie


Messaggi: 2
Iscritto: 17/03/2011

Segnala al moderatore
Postato alle 12:03
Giovedì, 17/03/2011
Buongiorno da un paio di giorni ho cominciato a studiare il C da autodidatta

Ma ho un problema che ho cercato di risolverlo tramite google ma niente...
Codice sorgente - presumibilmente C++

  1. #import <stdio.h>
  2.  
  3. int main (int argc, char *argv[20], char *envp[])
  4. {
  5.     char x[20];
  6.     printf ("Inserisci ciao ");
  7.     scanf ("%s",x);
  8.     if (x == 'ciao'){
  9.           printf("ok");
  10.           }
  11.     system("PAUSE");
  12. }



Praticamente il codice mi chiede di inserire ciao e lo mette nella variabile x poi tramite un if se la variabile contiene ciao mi stampa ok ma invece quando lo eseguo scrivo ciao e invece di comparirmi ok mi compare Premi un tasto per continuare...

Come mai ? dove sbaglio ?

Grazzie mille :D

PM
Avatar
_mikele_ (Member)
Rookie


Messaggi: 40
Iscritto: 06/12/2010

Up
3
Down
V
Segnala al moderatore
Postato alle 12:24
Giovedì, 17/03/2011
In C non puoi fare un confronto x == "ciao" ma devi usare una funzione che si chiama stringcompare, strcmp(s1, s2);
In s1 metti la variabile x, in s2 "ciao", ricordati di includere la libreria <string.h>

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.     char x[20];
  7.     printf("Inserisci ciao: ");
  8.     scanf("%s", x);
  9.     if(strcmp(x, "ciao")==0)
  10.         printf("Ok\n");
  11.     return 0;
  12. }



:)

Ultima modifica effettuata da _mikele_ il 17/03/2011 alle 14:19
pardon non avevo visto:) - Bonny - 17/03/11 12:31
Grazie mille ci prov e vedo se funziona :D - PeppEX185 - 17/03/11 13:12
Niente... ho provato a eserguire questo codice ma mi da errore nella linea 10 - PeppEX185 - 17/03/11 13:26
ok trovato nella stringa if(strcmp(s, "ciao") mancava una parentesi xD - PeppEX185 - 17/03/11 13:29
Dopo aver eseguito correttamente scrivo ciao e non mi sputa ok .-. - PeppEX185 - 17/03/11 13:31
mi sono dimenticato un parentesi tonda alla fine della riga 9 scusate l'ho scritto senza provarlo, cambia la riga con if(strcmp(s, "ciao")) - _mikele_ - 17/03/11 14:12
ahah giusto ecco cosa succede quando non si provano i programmi, la funzione ritorna 0 se c'è il confronto, adesso modifico il programma poi funziona :) - _mikele_ - 17/03/11 14:17
ok ora funziona l'ho provato :D - _mikele_ - 17/03/11 14:20
PM
Avatar
Bonny (Member)
Expert


Messaggi: 437
Iscritto: 24/04/2009

Up
2
Down
V
Segnala al moderatore
Postato alle 12:25
Giovedì, 17/03/2011
per fare i confronti tra "stringhe" in linguaggio c devi usare la funzione
strcmp(char *v1,char *v2);
restituisce 0 se v1 è uguale a v2.
Devi includere: #include<string.h>

PM
Avatar
crash outside control (Normal User)
Expert


Messaggi: 217
Iscritto: 12/02/2008

Up
2
Down
V
Segnala al moderatore
Postato alle 14:05
Giovedì, 17/03/2011
Non stampa "ok" semplicemente perchè (come ha detto Bonny) restituisce 0 se le due stringhe sono uguali.

Quindi per stampare "ok" quando la stringa inserita è "ciao", devi scrivere:

Codice sorgente - presumibilmente C/C++

  1. if (!strcmp(x, "ciao")) printf("Ok\n");


PM
Avatar
carlduke (Member)
Pro


Messaggi: 153
Iscritto: 29/01/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 12:35
Giovedì, 17/03/2011
questa riga è sbagliatissima:

Codice sorgente - presumibilmente C/C++

  1. if (x == 'ciao'){



gli apici ' ' servono per confrontare caratteri singoli, mentre quella è una stringa.
fai come ti hanno gia detto :k:

Ultima modifica effettuata da carlduke il 17/03/2011 alle 13:24
PM
Avatar
Metal (Normal User)
Newbie


Messaggi: 16
Iscritto: 04/04/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 15:51
Giovedì, 07/04/2011
Giusto per farti capire perché il tuo codice non funzionava, quando nel tuo codice fai:
Codice sorgente - presumibilmente C/C++

  1. if (x == 'ciao')



stai cercando di confrontare un puntatore (x) con una stringa ('ciao'); 'x' infatti contiene l'indirizzo di memoria del primo elemento dell'array (gli indirizzi di memoria sono valori esadecimali che rappresentano una particolare posizione della memoria).
Se non hai ancora studiato i puntatori, capirai meglio più avanti ^^

PM
Avatar
Peppe91 (Member)
Rookie


Messaggi: 41
Iscritto: 09/04/2011

Up
-1
Down
V
Segnala al moderatore
Postato alle 10:57
Giovedì, 21/04/2011
Io vedo la variabile x dichiarata come array. Non puoi inserire in questo modo dei caratteri in un array. Ti serve prima di tutto un ciclo for che ti permette di inserirli e poi lo strcmp per confrontare. E non (x==ciao). :)

PM