MISE EN ORDRE ALPHABETIQUE DE 2 CHAINES SANS UTILISER STRCMP ET STRNCMP
neo_00110010101
Messages postés360Date d'inscriptionsamedi 27 septembre 2003StatutMembreDernière intervention30 mai 2006
-
28 juin 2004 à 17:30
hackersmick
Messages postés2Date d'inscriptionjeudi 29 novembre 2007StatutMembreDernière intervention31 mars 2008
-
31 mars 2008 à 17:18
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
hackersmick
Messages postés2Date d'inscriptionjeudi 29 novembre 2007StatutMembreDernière intervention31 mars 2008 31 mars 2008 à 17:18
re..
j'ai oublié.. supprimes la ligne 7 de ton programme. Elle ne sert pas à grand chose ! ^^
hackersmick
hackersmick
Messages postés2Date d'inscriptionjeudi 29 novembre 2007StatutMembreDernière intervention31 mars 2008 31 mars 2008 à 17:13
Cc bethany...
Merci pour ton programme, il m'a aidé un peu pour un projet de c.
De plus, j'ai trouvé ce qui n'allait pas :)
Un point important à savoir sur les fonctions :
Ne JAMAIS appeler une fonction avant de la définir !!(c'est ce que tu as fait pourtant :s !)
Sinon quand tu définies ton main() écris " int main() ".
J'ai augmenté MAX à 4096 et j'ai mis un system("PAUSE"); et un return 0; ...
et c'est parti !! ^^
a+
hackersmick
Soilwork9
Messages postés16Date d'inscriptionlundi 9 août 2004StatutMembreDernière intervention13 septembre 2004 9 août 2004 à 11:22
Salut bethany!
Oublie immediatement ce que neo t'a dit a propos du warning, c'est TRES mal :)
Un warning, en soi, ce n'est pas genant puisque ca n'empeche pas de compiler. Alors bien sur, tu peux l'ignorer, meme si c'est vrai qu'en general on n'aime pas avoir des messages a la compilation. Alors le meilleur moyen pour faire disparaitre ce warning, c'est de le corriger...
Dans ton cas, le warning indique qu'effectivement, certains embranchements (de if ... else) n'aboutissent pas à un return, or ta fonction est censée retourner un int. Cela ne veut pas dire que ton programme ne fera pas ce qu'il a à faire. Mais quand le compilateur génère ce Warning, il n'analyse pas le code dans les moindres détails pour vérifier si dans toutes les situations, il y aura une valeur de retour...
C'est un peu difficile a expliquer mais je vais essayer de prendre un exemple. Dans la première boucle FOR de ta fonction... Il y a un bloc IF (sans else) à l'interieur duquel il y a un autre bloc IF/else, avec deux return. Le compilateur ne cherche pas a savoir si ton programme va forcement passer a un moment ou a un autre par le bloc avec les return. (Il le ferait peut-etre si la condition était if(1), mais ce n'est pas le cas). En tout cas, il constate que s'il passe toujours par le "else" du premier if ("else" qui n'existe pas), il n'aura pas de return, donc il fait la gueule :) Je ne sais pas si c'est vraiment clair.. J'en doute ;)
En tout cas, pour corriger ce warning, je te conseille de retourner une valeur d'erreur (typiquement : return -1) tout à la fin de ta fonction, avant l'accolade fermante, puisque normalement tu n'es pas censé passer par la.
Je te conseille vivement, plutot que de désactiver les warnings qui t'ennuient, au contraire, de tous les activer (avec un paramètre de compilation, tel que -Wall si tu utilises GCC/G++, mais des paramètres similaires existent avec tous les compilateurs, je suppose, suffit de chercher un peu). Car corriger les warnings t'evitera bien souvent des erreurs difficiles a tracer! Et cela t'assurera un code relativement propre :)
Dernieres petites choses, a propos de ton main : int main (int argc, char**argv). Ca t'evitera un warning si tu compiles avec -Wall ;)
Et utilise plutot un switch à la place de 3 if :
switch(ordre)
{
case 0: //blabla
break;
case 1://blabla
break;
case 2: //blabla
break;
default: //Erreur!!!!!
printf("Erreur !!!! Aie Aie Aie c'est pas normal!! Qu'est-ce qui se passe?\n");
break;
}
Voila, bonne continuation!!
++
Soilwork
cs_bethany
Messages postés26Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention15 mars 2005 29 juin 2004 à 11:16
Ah ok pour le m!=n !!! Mais un == ou ca???
Je vais modifier ma source :)
hilairenicolas
Messages postés398Date d'inscriptionjeudi 30 octobre 2003StatutMembreDernière intervention15 juin 20072 28 juin 2004 à 18:44
ton warning vient du fait que tous les cas possibles ne produisent pas un return
en effet, si (m!=n) on retourne quoi ?
et puis la comparaison sus-nommée n'est pas bonne ... il faut un ==
cs_bethany
Messages postés26Date d'inscriptionvendredi 2 avril 2004StatutMembreDernière intervention15 mars 2005 28 juin 2004 à 17:43
Merci pour les caractères neo je savais pas !!! maintenant je saurais ... ;)
pour le warning je c pas pouquoi il me warning lol !!! mais bon je c pa si ca sert a grand chose de rajouté ton pragma puisqu'il marche pour l'instant!!!
Si quelqu'un arrive a me le planter, merci de me dire ou ca plante pour que je trouve enfin 'ZE' faille à ce petit programme de débutant ;)
neo_00110010101
Messages postés360Date d'inscriptionsamedi 27 septembre 2003StatutMembreDernière intervention30 mai 2006 28 juin 2004 à 17:30
printf("Vous avez entre deux mots identiques.\n");
>>
printf("Vous avez entr\202 deux mots identiques.\n");
tu auras l'accent ... et puis pour ton warning, met ça au début après les #include :
#pragma warning (disable:4715)
comme ça plus de warning (je me demande si c'est bien ?)
Cela ne resout pas le problème hein ?! il faut que tu le sâche !
31 mars 2008 à 17:18
j'ai oublié.. supprimes la ligne 7 de ton programme. Elle ne sert pas à grand chose ! ^^
hackersmick
31 mars 2008 à 17:13
Merci pour ton programme, il m'a aidé un peu pour un projet de c.
De plus, j'ai trouvé ce qui n'allait pas :)
Un point important à savoir sur les fonctions :
Ne JAMAIS appeler une fonction avant de la définir !!(c'est ce que tu as fait pourtant :s !)
Sinon quand tu définies ton main() écris " int main() ".
J'ai augmenté MAX à 4096 et j'ai mis un system("PAUSE"); et un return 0; ...
et c'est parti !! ^^
a+
hackersmick
9 août 2004 à 11:22
Oublie immediatement ce que neo t'a dit a propos du warning, c'est TRES mal :)
Un warning, en soi, ce n'est pas genant puisque ca n'empeche pas de compiler. Alors bien sur, tu peux l'ignorer, meme si c'est vrai qu'en general on n'aime pas avoir des messages a la compilation. Alors le meilleur moyen pour faire disparaitre ce warning, c'est de le corriger...
Dans ton cas, le warning indique qu'effectivement, certains embranchements (de if ... else) n'aboutissent pas à un return, or ta fonction est censée retourner un int. Cela ne veut pas dire que ton programme ne fera pas ce qu'il a à faire. Mais quand le compilateur génère ce Warning, il n'analyse pas le code dans les moindres détails pour vérifier si dans toutes les situations, il y aura une valeur de retour...
C'est un peu difficile a expliquer mais je vais essayer de prendre un exemple. Dans la première boucle FOR de ta fonction... Il y a un bloc IF (sans else) à l'interieur duquel il y a un autre bloc IF/else, avec deux return. Le compilateur ne cherche pas a savoir si ton programme va forcement passer a un moment ou a un autre par le bloc avec les return. (Il le ferait peut-etre si la condition était if(1), mais ce n'est pas le cas). En tout cas, il constate que s'il passe toujours par le "else" du premier if ("else" qui n'existe pas), il n'aura pas de return, donc il fait la gueule :) Je ne sais pas si c'est vraiment clair.. J'en doute ;)
En tout cas, pour corriger ce warning, je te conseille de retourner une valeur d'erreur (typiquement : return -1) tout à la fin de ta fonction, avant l'accolade fermante, puisque normalement tu n'es pas censé passer par la.
Je te conseille vivement, plutot que de désactiver les warnings qui t'ennuient, au contraire, de tous les activer (avec un paramètre de compilation, tel que -Wall si tu utilises GCC/G++, mais des paramètres similaires existent avec tous les compilateurs, je suppose, suffit de chercher un peu). Car corriger les warnings t'evitera bien souvent des erreurs difficiles a tracer! Et cela t'assurera un code relativement propre :)
Dernieres petites choses, a propos de ton main : int main (int argc, char**argv). Ca t'evitera un warning si tu compiles avec -Wall ;)
Et utilise plutot un switch à la place de 3 if :
switch(ordre)
{
case 0: //blabla
break;
case 1://blabla
break;
case 2: //blabla
break;
default: //Erreur!!!!!
printf("Erreur !!!! Aie Aie Aie c'est pas normal!! Qu'est-ce qui se passe?\n");
break;
}
Voila, bonne continuation!!
++
Soilwork
29 juin 2004 à 11:16
Je vais modifier ma source :)
28 juin 2004 à 18:44
en effet, si (m!=n) on retourne quoi ?
et puis la comparaison sus-nommée n'est pas bonne ... il faut un ==
28 juin 2004 à 17:43
pour le warning je c pas pouquoi il me warning lol !!! mais bon je c pa si ca sert a grand chose de rajouté ton pragma puisqu'il marche pour l'instant!!!
Si quelqu'un arrive a me le planter, merci de me dire ou ca plante pour que je trouve enfin 'ZE' faille à ce petit programme de débutant ;)
28 juin 2004 à 17:30
>>
printf("Vous avez entr\202 deux mots identiques.\n");
tu auras l'accent ... et puis pour ton warning, met ça au début après les #include :
#pragma warning (disable:4715)
comme ça plus de warning (je me demande si c'est bien ?)
Cela ne resout pas le problème hein ?! il faut que tu le sâche !