传递2个输入字符串进行比较
我正在测试一个小程序,它基本上比较了2个输入字符串是否相同(就像strcmp那样)。
我想做类似的事情(用户在同一行上输入2个所需的字符串)。 在这种情况下,它应该返回“两个字符串是不同的”
./a.out foo bar
我应该这样做来读取用户的输入字符串吗?
scanf("%s %s", str1, str2);
要么
gets(str1); gets(str2);
这是我到目前为止(由于某些原因似乎陷入无限循环)
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; }
该解决方案应该有效:
#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."); }
你不应该这样做。 相反,我建议您了解命令行参数如何通过argc
和argv
参数传递给main
函数。
我建议你尝试这个程序来帮助你理解:
#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]); }
对于您的示例调用
./a.out foo bar
上面的程序将打印
argc = 3 argv[0] = "./a.out" argv[1] = "foo" argv[2] = "bar"