我写了这个简单的脚本,它让我发疯了。我无法理解为什么我所做的比较总是不一样。
这是我的代码:
int main()
{
char test[]="boy";
char test2[20];
fgets(test2, 20, stdin);
if (_stricmp(test2, test) == 0)
{
printf("the same");
}
else
{
printf("Not");
}
}
如果我插入“男孩”这个词,我仍然会弄错。
有什么问题?
答案 0 :(得分:2)
所以看起来我们应该添加一个新行然后它很好用
char test[]="boy\n"
;
答案 1 :(得分:0)
已经回答。但是在地址@Jabberwocky的评论中添加我的答案。
该程序的问题不在col-md
中,而在_stricmp
中。当您键入“ boy”时,fgets
数组将填充test2
,这不等于{ 'b', 'o', 'y', '\n', '\0' }
。
C库函数char * fgets(char * str,int n,FILE * stream)从指定的流中读取一行并将其存储到str指向的字符串中。当读取(n-1)个字符,读取换行符或到达文件结尾(以先到者为准)时,它将停止。
您有两种方法可以解决此问题:
将{ 'b', 'o', 'y', '\0' }
添加到\n
的末尾,因此它变成test
。如果您正在使用该字符串执行其他操作,而无需在其中添加char test[] = "boy\n";
,则可能会很烦人。因此,我建议第二种选择。
在读取输入后删除\n
,然后进行比较。通常,我编写自己的\n
函数来解决此问题,并在用户输入的长度大于缓冲区长度时解决该问题。
GetString