Newsgroup: it.comp.lang.c
Titolo: L'esecuzione condizionale If applicata ai Char

Salve a tutti ho un dubbio che mi assale, in che forma posso confrontare due
variabili char con il comando if?
Mi spiego meglio , una forma del genere non mi va:
char prova[7] = "pippo";
char prova2[7] = "pippo";
if (prova == prova2) ecc.....
non me la prende, non mi prende neanche una forma del genere:
if(prova == "pippo") ....
come posso fare?
Grazie a tutti :)

 wrote:
: Salve a tutti ho un dubbio che mi assale, in che forma posso confrontare due
: variabili char con il comando if?
: Mi spiego meglio , una forma del genere non mi va:
: char prova[7] = "pippo";
: char prova2[7] = "pippo";
: if (prova == prova2) ecc.....
: non me la prende, non mi prende neanche una forma del genere:
Ciao,
cosi' confronti i puntatori, non le stringhe a cui puntano.
uno dei modi per fare cio' e' il seguente:
(non testato, puo' essere cannatello)
i = 0;
while(prova[i] && prova2[i] && prova[i] == prova2[i])
	i++;
if (prova[i] == '\0' && prova2[i] == '\0')
	printf("le variabili sono uguali\n");
else
	printf("le variabili _non_ sono uguali\n");
altrimenti usa una funzione di libreria:
#include <string.h>
if (!strcmp(prova, prova2))
	printf("uguali\n"); 
else
	printf("non uguali\n");
ciao
antirez

 char prova2[7] = "pippo";
Devi usare la funzione standard
int strcmp(const char *s1,const char *s2)
definita in string.h
essa ti ritorna
a) un valore negativo se s1<s2
b) un valore positivo se s1>s2
c) zero se le due stringhe sono uguali
quindi, se hai due array di char definiti ad esempio cosě:
char stringa1[DIM1];
char stringa2[DIM2];
e vuoi verificare se contengono gli stessi dati (sono uguali) fai:
if(strcmp(stringa1,stringa2)==0)
   {
    ....}

Grazie Mille ragazzi :)

 variabili char con il comando if?
[ snip ]
#include <string.h>
...
if (strcmp(prova, prova2) == 0) {
   /* sono uguali */
}
Ti consiglio l'acquisto di un buon manuale.
Ciao ciao,
Andrea
-- 
"...Unix, MS-DOS, and Windows NT (also known as the Good, the Bad, and 
 the Ugly)."
(by Matt Welsh)

> Ti consiglio l'acquisto di un buon manuale.
Quale mi consigli? :)
ehehhe
Zinco

if(prova == "pippo") ....
Attenzione al fatto che le "variabili" di cui parli non sono di tipo
char, ma di tipo "array-di-7-char", e' diverso.
Due variabili di tipo "char" possono essere confrontate tramite il
segno di == perche' si puo' indirizzare direttamente il loro
contenuto, cosi' come per due interi, due floating point, ecc..
Nel tuo caso, invece, sia "prova" che "prova2" nell'espressione
if (prova == prova2) ...
*decadono* nel puntatore al primo elemento e quindi un confronto del
genere equivale a confrontare :
if ( &prova[0] == &prova2[0] ) ...
Il che, presumibilmente, sara' sempre falso.
Stessa cosa nel secondo caso :
if ( &prova[0] == &"pippo"[0] ) ...
Per ovviare al problema usa strcmp() della libreria standard, che
confronta carattere per carattere in modo automatico, e il cui
prototipo e' in string.h.
Un metodo utile e' quello di definire una macro :
#define STREQ( s, t )   ( strcmp( (s), (t) ) == 0 )
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------

 Quale mi consigli? :)
'Linguaggio C' di K&R, seconda edizione, ovviamente 8-P
