Je teste un petit programme qui compare fondamentalement si 2 chaînes d’entrée sont identiques (comme le fait strcmp).
Je voudrais faire quelque chose comme (les utilisateurs tapent 2 chaînes désirées sur la même ligne). Dans ce cas, il devrait retourner “Les deux chaînes sont différentes”
./a.out foo bar
dois-je faire cela pour lire les chaînes d’entrée de l’utilisateur?
scanf("%s %s", str1, str2);
ou
gets(str1); gets(str2);
Voici ce que j’ai jusqu’à présent (il semble s’enliser dans une boucle infinie pour certaines raisons)
int mystrcmp(char str1[], char str2[]) { int i = 0; while (str1[i] == str2[i]) { if (str1[i] == '\0' || str2[i] == '\0') break; i++; } if (str1[i] == '\0' && str2[i] == '\0') return 0; else return -1; } int main(int argc, char * * argv) { int cmp; char str1[1000], str2[1000]; scanf("%s %s", str1, str2); //gets(str1); gets(str2); cmp = mystrcmp(str1, str2); if (cmp == 0) printf("The two ssortingngs are identical.\n"); else printf("The two ssortingngs are different.\n"); return 0; }
Cette solution devrait fonctionner:
#include #include int main(int argc, char *argv[]) { if(argc != 3) { puts("Wrong number of arguments"); return 0; } if(strcmp(argv[1], argv[2])) puts("The two ssortingngs are different."); else puts("The two ssortingngs are identical."); }
Vous devriez faire ni l’un ni l’autre. Au lieu de cela, je vous suggère d’apprendre comment les arguments de ligne de commande sont passés à la fonction main
via les arguments argc
et argv
.
Je vous suggère d’essayer ce programme pour vous aider à comprendre:
#include int main(int argc, char *argv[]) { printf("argc = %d\n", argc); for (int a = 0; a < argc; ++a) printf("argv[%d] = \"%s\"\n", a, argv[a]); }
Pour votre exemple d'invocation
./a.out foo bar
le programme ci-dessus imprimera
argc = 3 argv[0] = "./a.out" argv[1] = "foo" argv[2] = "bar"