Estoy probando un pequeño progtwig que básicamente compara si 2 cadenas de entrada son idénticas (como lo hace strcmp).
Me gustaría hacer algo como (los usuarios escriben 2 cadenas deseadas en la misma línea). En este caso debería devolver “Las dos cadenas son diferentes”.
./a.out foo bar
¿Debo hacer esto para leer las cadenas de entrada del usuario?
scanf("%s %s", str1, str2);
o
gets(str1); gets(str2);
Esto es lo que tengo hasta ahora (parece estar atrapado en un bucle infinito por algunas razones)
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 strings are identical.\n"); else printf("The two strings are different.\n"); return 0; }
Esta solución debería funcionar:
#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 strings are different."); else puts("The two strings are identical."); }
Usted no debe hacer nada. En su lugar, le sugiero que aprenda cómo se pasan los argumentos de la línea de comandos a la función main
través de los argumentos argc
y argv
.
Le sugiero que pruebe este progtwig para ayudar a su comprensión:
#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]); }
Para tu ejemplo de invocación.
./a.out foo bar
el progtwig de arriba se imprimirá
argc = 3 argv[0] = "./a.out" argv[1] = "foo" argv[2] = "bar"