以下代碼時:發生當比較C中的字符串時,fgets比scanf更有效嗎?
#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!
這是爲什麼?
對於''%s「'格式的'scanf'來說,讀取*空格分隔的單詞*是一件好事。 –
您是否嘗試過在strncmp之前打印名稱以檢查在那裏保存了什麼? – CIsForCookies
這裏沒有理由使用'strncmp'。使用'strcmp',因此您不必在匹配中計數字符。並且*總是*檢查'scanf'的返回值(並且就此而言,'fgets')。 – rici