Можете объяснить данный фрагмент кода?Непонятно, почему используется такая запись printf("%s\n", "Error! Repeat input"); scanf_s("%*c", 0);
int getDouble(double *a)
{
int n;
do{
n = scanf_s("%lf", a, sizeof(double));
if (n < 0) return 0;
if (n == 0){
printf("%s\n", "Error! Repeat input");
scanf_s("%*c", 0);
}
} while (n == 0);
return 1;
Ответы (2 шт):
printf("%s\n", "Error! Repeat input"); у вас будет выводить строку, указанную в аргументе.
scanf_s("%*c", 0); будет требовать ввода данных типа char.
Вы можете узнать больше об этих функциях по этим ссылкам например:
printf("%s\n", "Error! Repeat input"); просто печатает сообщение. Можно ещё так: printf("Error! Repeat input\n");. Или так: printf("%s", "Error! Repeat input\n");.
scanf_s("%*c", 0); читает один символ из входного потока и никуда его не сохраняет. Полагаю что автор кода таким образом пропускает символ который испортил предыдущую попытку чтения числа.
Общий дизайн не самый лучший. Если вместо числа пользователь ввёл слово из нескольких букв будет напечатано несколько сообщений об ошибке:
word Error! Repeat input Error! Repeat input Error! Repeat input Error! Repeat input 12
Улучшить поведение можно поменяв "%*c" на "%*s". В случае ошибки будет пропущено целиком слово. Уже лучше. Если применить "%*[^\n]" то будет пропущена вся строка с ошибкой. Кажется, для пользователя это удобнее всего.