处理以下代码时:
#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!
这是为什么?
答案 0 :(得分:1)
尝试使用以下行作为您的用法,因此scanf
会一直接受值,直到遇到'\n'
(换行符),因此空格也会被保存。
scanf("%[^\n]", name);
请记住,scanf
代表"扫描格式化"并且比用户输入的数据格式少了一些。如果您完全控制输入数据格式但通常不适合用户输入,那么这是理想的选择。