我有以下代码,应该将用户输入作为命令,然后检查命令是否已预定义。但是,对于输入的任何命令,输出为“ 您寻求帮助”。 我认为问题可能与我将用户输入的字符串与设置的字符串进行比较的方式有关,但是我仍然需要帮助解决问题。
char command[10];
char set[10];
char set1[10];
strcpy(set, "help");
strcpy(set1, "thanks");
int a = 0;
while (a != 1)//the program should not terminate.
{
printf("Type command: ")
scanf("%s", command);
if (strcmp(set, command))
{
printf("You asked for help");
}
else if (strcmp(set1, command))
{
printf("You said thanks!");
}
else
{
printf("use either help or thanks command");
}
}
答案 0 :(得分:8)
if (strcmp(set, command))
应该是
if (strcmp(set, command) == 0)
原因是strcmp
如果LHS或RHS较大,则返回非零值;如果相等,则返回零。由于零在条件中的结果为“假”,因此您必须显式添加== 0
测试以使其符合您的期望,即相等。
答案 1 :(得分:1)
首先,始终在使用scanf()
时对输入内容进行长度限制,例如
scanf("%9s", command);
对于包含10个元素的char
数组,以避免由于过长的输入而导致缓冲区溢出。
也就是说,if...else
块逻辑的工作方式如下:
if (expression is true) { // produce a non-zero value, truthy
execute the if block
}
else { // expression is falsy
execute the else block
}
在您的情况下,控制表达式为strcmp(set, command)
。
现在,请注意,如果 match ,strcmp()
返回0
,如果 match ,则返回a非零值。
因此
0
-将会被评估为 falsy ,并且与您的期望不符,它将转到else
部分。if
块将再次显示为真被错误地执行。因此,在您的情况下,您需要更改条件以取反返回值,例如
if (!strcmp(set, command))
{
printf("You asked for help");
}
else if (!strcmp(set1, command))
{
printf("You said thanks!");
}
else
{
printf("use either help or thanks command");
}