Новичок с C здесь. Я пытаюсь запустить цикл, в котором строки и ints
вводятся в различные поля struct
. При запросе «фамилии» пользователь может нажать клавишу ввода без ввода других данных, и цикл должен закончиться.
Проблема в том, что с этим кодом цикл не заканчивается (запросы на ввод фамилии и имени выполняются вместе в одной строке), и значение зарплаты всегда получается неправильным (0 или какое-то большое число)
while (employee_num <= 2)
{
printf("Enter last name ");
fgets(employee[employee_num].last_name, sizeof(employee[employee_num].last_name), stdin);
if(strlen(employee[employee_num].last_name) == 0)
break;
printf("Enter first name ");
fgets(employee[employee_num].first_name, sizeof(employee[employee_num].first_name), stdin);
printf("Enter title ");
fgets(employee[employee_num].title, sizeof(employee[employee_num].title), stdin);
printf("Enter salary ");
fgets(strng_buffer, 1, stdin);
sscanf(strng_buffer, "%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
Если вместо этого я попробую этот код, я смогу правильно выйти из цикла после первого его запуска, но не смогу выйти после этого (нажав клавишу ввода в части фамилии - возможно, \n я не могу очистить?):
char strng_buffer[16];
while (employee_num <= 5)
{
printf("Enter last name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].last_name);
if(strlen(employee[employee_num].last_name) == 0)
break;
printf("Enter first name ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].first_name);
printf("Enter title ");
fgets(strng_buffer, sizeof(strng_buffer), stdin);
sscanf(strng_buffer, "%s", employee[employee_num].title);
printf("Enter salary ");
scanf("%d", &employee[employee_num].salary);
++employee_num;
getchar();
}
Мне любопытно, как заставить это работать так, как задумано, и что лучше всего подходит для таких записей (например, использование sscanf, fgets и т. д.)
Заранее спасибо!