【发布时间】:2017-03-13 14:32:37
【问题描述】:
作为一个初学者,我一直在使用库 string.h 的一些函数,并且对函数 strcmp 有一些问题。
我编写了比较两个字符串的程序。如果它们相等,则返回 YES 和 NO,否则返回。
#include <stdio.h>
#include <string.h>
int main() {
char a[100];
char b[15] = "hello";
fgets(a, 100, stdin);
int compare;
compare = strcmp(a, b);
if(compare == 0) {
printf("YES");
}
else {
printf("NO");
}
return 0;
}
运行它后,即使我从键盘输入hello,我也会得到NO。当我添加printf("%d", compare) 行时,结果发现对于任何输入我都会得到1,也就是说,a 中的停止字符大于b 中的停止字符。
我的错误在哪里?
【问题讨论】:
-
问题不在于
strcmp,而在于fgets的作用和工作原理。 -
@izlin:这意味着 tio 不提供兼容的标准库。
-
@Olaf - 或者在线编译器中的“输入”字段没有在输入中附加换行符:)
-
@Olaf - 您可以通过输入 EOF 而不是换行符来获得一个兼容的环境来表现相同,不是吗?我认为在线编译器只是举例说明即使使用 stdio 工具仍有很多需要考虑的地方。输入流抽象不是完全抽象的。
-
@StoryTeller:好的,我收回我对那个特定平台的评论。想要橙子吗?