测试字符串相等问题
有一段时间没有在C中编程,所以我肯定在这里遗漏了一些东西,但我无法弄清楚它是什么。
我有两个字符串,如下所示:
char toMatch[] = "--exit--"; char entry[1024];
通过这个程序,我有一个while循环接受用户输入来修改整个程序中的字符串entry
。 当entry
等于toMatch
时,我想在while循环时退出。
我认为使用strcmp
函数很容易,但由于某种原因它不起作用。 本来我有这个:
while(strcmp(entry, toMatch) != 0) { // accept user input here to modify entry }
但是,这不起作用。 所以我在再次接受用户输入之前添加了一行代码来清除entry
内容:
while(strcmp(entry, toMatch) != 0) { memset(entry, 0, sizeof(entry)); // accept user input here to modify entry }
这也不起作用。 我需要entry
这么长,因为用户的输入可以是小于此的任何长度。 我不知道为什么strcmp()
不起作用,所以我想我错过了一些显而易见的东西。
如果总是用零显式地写比较,那么使用strcmp()
很容易:
-
strcmp(a, b) == 0
表示相等 -
strcmp(a, b) != 0
表示不等式 - 对于等于或等于
b
a
排序strcmp(a, b) >= 0
-
strcmp(a, b) > 0
表示b
之后a
排序 - 对于等于或等于
b
之前a
排序strcmp(a, b) <= 0
-
strcmp(a, b) < 0
表示b
之前a
排序
如果你在输入中匹配"--exit--"
遇到问题,你是否删除了前导空格,尾随空白,尾随换行符(特别是后者,如果你用fgets()
读取输入)。 这表明了什么:
printf("[[%s]]\n", entry);
方括号显示程序认为字符串末尾的位置。