Учтите, что для выбора пунктов меню теперь используются номера, а не начальные буквы, применявшиеся в двух предыдущих примерах.
8. В программе есть несколько участков, в которых хотелось бы спросить пользователя о том, уверен ли он в своем запросе. Вместо того чтобы вставлять в эти места программный код, задающий вопрос, поместим его в отдельную функцию
get_confirm
:
static int get_confirm(const char *question) {
char tmp_str[TMP_STRING_LEN + 1];
printf("%s", question);
fgets(tmp_str, TMP_STRING_LEN, stdin);
if (tmp_str[0] == 'Y' || tmp_str[0] = 'y') {
return(1);
}
return(0);
}
9. Функция
enter_new_cat_entry
позволяет вводить новый элемент каталога. Вам не нужно сохранять перевод строки, который возвращает функция
fgets
, поэтому отбросьте его:
static int enter_new_cat_entry(cdc_entry *entry_to_update) {
Обратите внимание на то, что вы не применяете функцию
gets
, поскольку нет способа проверить переполнение буфера. Всегда избегайте применения функции
gets
!
10. Теперь вы переходите к функции
enter_new_track_entries
для ввода информации о дорожке. Эта функция немного сложнее функции ввода элемента каталога, поскольку вы разрешаете существующему элементу-дорожке оставаться неизменным:
printf("\nUpdating tracks for %s\n", entry_to_add_to->catalog);
printf("Press return to leave existing description unchanged, \n");
printf(" a single d to delete this and remaining tracks, \n");
printf(" or new track description\n");
while(1) {
11. Сначала вы должны проверить, существует ли уже дорожка с текущим номером дорожки. В зависимости от результатов проверки меняется строка приглашения: