2010-04-21 7 views
1

Étant donné les variables char * name1, name2 et name3, écrivez un fragment de code qui affecte la plus grande valeur à la variable max (supposons que les trois ont déjà été déclarées et ont reçu des valeurs).Aide avec chaînes en C

J'ai essayé et est venu avec ceci:

if ((strcmp(name1,name2)>0)&&(strcmp(name1,name3)>0)){ 
max=name1; 
} 
else if ((strcmp(name2,name1)>0)&&(strcmp(name2,name3)>0)){ 
max=name2; 
} 
else if((strcmp(name3,name1)>0)&&(strcmp(name3,name2)>0)){ 
max=name3; 
} 
else if(strcmp(name3,name1)==0){ 
max=name1,name3; 
} 
else if (strcmp(name2,name1)==0){ 
max=name2,name1; 
} 
else if (strcmp(name2,name3)==0){ 
max=name2,name3; 
} 
else{ 
max=name1,name2,name3; 
} 

Cependant, je reçois cette erreur Votre code est incorrect. Vous ne gérez pas la situation lorsque deux ou plusieurs chaînes sont égales.

... Résolu

+1

Comment obtenez-vous cette erreur? Est-ce d'une personne? – WhirlWind

+0

Le message d'erreur semble assez clair. Regardez attentivement votre code et considérez ce qu'il fait si toutes les 3 chaînes sont égales. (Entre autres cas) –

+0

Si toutes les trois chaînes sont égales alors il n'y aurait pas la plus grande valeur ... Qu'est-ce que je manque ... – DomX23

Répondre

1

strcmp Renvoie 0 lorsque vos chaînes sont égales

Je vous laisse pour vous de savoir pourquoi vous n'êtes pas manipuler.

Edit:

Bob et Alice sont de 10 ans.
Quel est l'âge maximum?

Astuce: il est pas indéfini .... c'est 10.

+0

100% d'accord avec cette déclaration! – Marlon

+0

Ouais et il renvoie une valeur positive si x> y en termes de strcmp (x, y). – DomX23

+1

Wow, j'ai enfin compris ... J'aime comment vous me faites résoudre moi-même la question sans fournir de code. – DomX23

1

Attention:strcmp ne fait pas faire comparaison numérique!

C'est

strcmp("10","2") 

retourne une valeur négative, ce qui indique que "2" est plus grand que "10" qui est presque certainement pas ce que vous voulez.

Vous souhaitez probablement convertir les chaînes en nombres avant de les comparer. Envisagez d'utiliser sprintf ou atoi ou atof ou strtod.