当我运行它时,if语句假设只比较两个数组的第一个元素。只要数组“ans”只包含y或Y,它就可以正常工作,但是如果我输入“是”等,它会返回false并向下射击。
char y[2]= "y";
char n[2] = "n";
char ans[5];
printf("Answer yes of no. (y/n) ");
scanf(" %s", ans);
if (strcasecmp(&ans[0], &y[0]) == 0)
{
printf("You said yes.\n");
printf("%c, %s\n", y[0], ans);
}
else if (strcasecmp(&ans[0], &n[0]) == 0)
{
printf("You said no.\n");
}
else
{
printf("hmm?\n");
}
答案 0 :(得分:2)
实际上,strcasecmp()
比较两个字符串,而不是两个字符,即使您将指针传递给它们的第一个字符,它仍会比较从该字符开始的两个字符串,直到终止'\0'
。
你可以比较他们的第一个字符,忽略这样的情况:
if (toupper(ans[0]) == toupper(y[0])))
答案 1 :(得分:1)
使用strncasecmp
代替strcasecmp
,这样您就可以只比较第一个字符而不是整个字符串。变化:
if (strcasecmp(&ans[0], &y[0]) == 0)
为:
if (strncasecmp(ans, y, 1) == 0)
,其他类似的。