Основы программирования в Linux
Шрифт:
char tmp_str[TMP_STRING_LEN + 1];
menu_options option_chosen = mo_invalid;
while (option_chosen == mo_invalid) {
if (cdc_selected->catalog[0]) {
printf("\n\nCurrent entry: ");
printf("%s, %s, %a, %s\n",
cdc_selected->catalog, cdc_selected->title,
cdc_selected->type, cdc_selected->artist);
printf("\n");
printf("1 - add new CD\n");
printf("2 — search for a CD\n");
printf("3 — count the CDs and tracks in the database\n");
printf("4 — re-enter tracks for current CD\n");
printf("5 - delete this CD, and all its tracks\n");
printf("6 - list tracks for this CD\n");
printf("q — quit\n");
printf("\nOption: ");
fgets(tmp_str, TMP_STRING_LEN, stdin);
switch(tmp_str[0]) {
case '1':
option_chosen = mo_add_cat;
break;
case '2':
option_chosen = mo_find_cat;
break;
case '3':
option_chosen = mo_count_entries;
break;
case '4':
option_chosen = mo_add_tracks;
break;
case '5':
option_chosen = mo_del_cat;
break;
case '6':
option_chosen = mo_list_cat_tracks;
break;
case 'q':
option_chosen = mo_exit;
break;
}
} else {
printf("\n\n");
printf("1 - add new CD\n");
printf("2 - search for a CD\n");
printf("3 — count the CDs and tracks in the database\n");
printf("q — quit\n");
printf("\nOption: ");
fgets(tmp_str, TMP_STRING_LEN, stdin);
switch(tmp_str[0]) {
case '1':
option_chosen = mo_add_cat;
break;
case '2':
option_chosen = mo_find_cat;
break;
case '3':
option_chosen = mo_count_entries;
break;
case 'q':
option_chosen = mo_exit;
break;
}
}
} /* while */
return(option_chosen);
}
Примечание
Учтите, что для выбора пунктов меню теперь используются номера, а не начальные буквы, применявшиеся в двух предыдущих примерах.
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) {
cdc_entry new_entry;
char tmp_str[TMP_STRING_LEN + 1];
memset(&new_entry, '\0', sizeof(new_entry));
printf("Enter catalog entry: ");
(void)fgets(tmp_str, TMP_STRING_LEN, stdin);
strip_return(tmp_str);
strncpy(new_entry.catalog, tmp_str, CAT_CAT_LEN - 1);
printf("Enter title: ");
(void)fgets(tmp_str, TMP_STRING_LEN, stdin);
strip_return(tmp_str);
strncpy(new_entry.title, tmp_str, CAT_TITLE_LEN - 1);
printf("Enter type: ");
(void)fgets(tmp_str, TMP_STRING_LEN, stdin);
strip_return(tmp_str);
strncpy(new_entry.type, tmp_str, CAT_TYPE_LEN - 1);
printf("Enter artist: ");
Поделиться:
Популярные книги
Идеальный мир для Лекаря 13
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Кай из рода красных драконов 4
4. Красная кость
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 3
3. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
6.00
рейтинг книги
Корсар
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Моров. Том 5
4. Моров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Деревенщина в Пекине
1. Пекин
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Алекс и Алекс
1. Алекс и Алекс
Фантастика:
боевая фантастика
6.83
рейтинг книги
Студиозус
3. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
На границе империй. Том 2
2. Фортуна дама переменчивая
Фантастика:
космическая фантастика
7.35
рейтинг книги
Двойник короля 11
11. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
По осколкам твоего сердца
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
Афганский рубеж 2
2. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Звездная Кровь. Изгой VII
7. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
технофэнтези
рпг
фантастика: прочее
попаданцы
5.00
рейтинг книги
Двойник Короля 10
10. Двойник Короля
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00