比较C中的字符串时,fgets比scanf更有效吗?

时间:2017-07-17 07:13:01

标签: c fgets c-strings

处理以下代码时:

#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!这是为什么?

1 个答案:

答案 0 :(得分:1)

尝试使用以下行作为您的用法,因此scanf会一直接受值,直到遇到'\n'(换行符),因此空格也会被保存。

scanf("%[^\n]", name);

请记住,scanf代表"扫描格式化"并且比用户输入的数据格式少了一些。如果您完全控制输入数据格式但通常不适合用户输入,那么这是理想的选择。