我想在if语句中使用字符串数组来测试输入字符串是否与数组中的任何字符串匹配。
到目前为止,这是我尝试过的:
void checkForError(char input[50])
{
const char *input2[]={"print","loadStarter","terminate()"};
if(input != input2)
{
printf("Error:Incorrect method '%s'.\n",input);
}
else
{
abort();
}
}
如果我要在数组中输入类似“打印”的东西,它最终会显示给我:
错误:'print'方法不正确。
但是当我尝试未在数组中列出的内容如“g”时,它会不停地重复出现错误消息。
我在想也许这样的事情可行:
void checkForError(char input)
{
if(strcmp(input,"print"))!=0 || strcmp(input,"loadStarter"))!=0 || strcmp(input,"terminate()")
{
printf("Error:Incorrect method '%s'.\n");
}
else
{
abort();
}
}
但事实证明实际上不起作用,所以我该怎么做?
答案 0 :(得分:4)
您无法使用==
和!=
来比较C中的字符串(有用);您必须使用strcmp
之类的库函数。有关详细信息,请参阅How to compare strings in an "if" statement?。
答案 1 :(得分:2)
我认为你的问题的一个很好的解决方案是绕过你的阵列,在第一场比赛中中止。
void checkForError(char* input)
{
const char *input2[]={"print","loadStarter","terminate()"};
const int len = sizeof(input2)/sizeof(input2[0]);
for (int i = 0; i < len ;i ++)
{
if (strcmp(input,input2[i]) == 0)
{
//I have matched the string input2[i]
abort();
}
}
// Nothing matched
printf("Not found\n");
}
这比任何手动编码方法都更容易扩展。
另外,如果你打算用这些字符串做很多事情,并且你的字符串数量有限,你应该把它们变成某种枚举。这样你就不必将strcmp分散到各处,你可以使用标准的switch语句。
答案 2 :(得分:0)
你的第二个想法是正确的,你不应该使用==
运算符比较字符串,无论如何,我不确定其余的是否是拼写错误,但它应该是这样的:
void checkForError(char * input)
// ^ note the * (pointer)
{
if(strcmp(input,"print")!=0 || strcmp(input,"loadStarter")!=0 || strcmp(input,"terminate()") != 0)
// you forgot brackets
{
printf("Error:Incorrect method '%s'.\n", input);
// ^ you forgot the "input" parameter
}
else
{
abort();
}
}
答案 3 :(得分:0)
更好的方法是获得返回值,然后让错误消息取决于返回值。
// return 1 when string is OK, 0 otherwise:
int checkForError(const char* input)
{
if(!strcmp(input,"print")) || !strcmp(input,"loadStarter")0 || !strcmp(input,"terminate()")
{
return 1;
}
else
{
return 0;
}
}