Scanf и получает работать по-другому о положить '\0' в массиве?
Я получаю и отображаю имена и останавливаю программу, когда набираю клавишу ввода. В приведенном ниже коде я получаю правильный результат (я знаю, что "получает" устарела):
#include <stdio.h>
main()
{
char name[50];
while(1)
{
printf("Name: ");
scanf("%s", name);
if(name[0]=='\0')
break;
else
printf("Name entered: %s\n", name);
}
}
Но когда я пытаюсь использовать scanf:
printf("Nome: ");
scanf("%s", nome);
Состояние name[0]=='\0'
никогда не верно в этот раз. Зачем? '\0'
работает по-разному в этих функциях?
2 ответа
Если scanf
не может присвоить значение переменной (потому что входной поток имеет пробел, заканчивающийся строкой), он не очищает его; частично это объясняется тем, что не все переменные имеют очевидное "чистое" состояние.
Итак, после сканирования nome
все еще содержит то, что содержалось раньше. Вам нужно проверить, удалось ли scanf назначить переменную, проверив ее возвращаемое значение:if (scanf(...) == 1)
- что означает "Scanf успешно присвоил одну переменную?"
При использовании "scanf" переменная не становится строкой, а с "gets" переменная (name) становится строкой, потому что "gets" автоматически помещает в нее '\0'?