在 C 中比较字符串时,fgets 是否比 scanf 更有效?
Is fgets more effective than scanf when comparing strings in C?
处理以下代码时:
#define MAX_NAME_LENGHT 256
int main(void)
{
char name[MAX_NAME_LENGHT];
printf("Enter your name: \n");
scanf("%s", name);
if(strncmp(name, "John Smith", 10) == 0)
{
printf("Hello, John Smith!\n");
}
else
{
printf("Intruder!!!\n");
}
return 0;
}
出现许多错误,尽管输入了 John Smith
,但输出打印了 Intruder!!!
。但是,当我替换
scanf("%s", name);
和
fgets(name, sizeof(name), stdin);
输出打印Hello, John Smith!
这是为什么?
尝试使用下面的行作为您的用法,这样 scanf
会一直获取值,直到遇到 '\n'
(换行符),这样也可以节省空间。
scanf("%[^\n]", name);
请记住,scanf
代表 "scan formatted",并且与用户输入的数据相比,格式化的数据少得可怜。如果您可以完全控制输入数据格式但通常不适合用户输入,这是理想的选择。
处理以下代码时:
#define MAX_NAME_LENGHT 256
int main(void)
{
char name[MAX_NAME_LENGHT];
printf("Enter your name: \n");
scanf("%s", name);
if(strncmp(name, "John Smith", 10) == 0)
{
printf("Hello, John Smith!\n");
}
else
{
printf("Intruder!!!\n");
}
return 0;
}
出现许多错误,尽管输入了 John Smith
,但输出打印了 Intruder!!!
。但是,当我替换
scanf("%s", name);
和
fgets(name, sizeof(name), stdin);
输出打印Hello, John Smith!
这是为什么?
尝试使用下面的行作为您的用法,这样 scanf
会一直获取值,直到遇到 '\n'
(换行符),这样也可以节省空间。
scanf("%[^\n]", name);
请记住,scanf
代表 "scan formatted",并且与用户输入的数据相比,格式化的数据少得可怜。如果您可以完全控制输入数据格式但通常不适合用户输入,这是理想的选择。