Основы программирования в Linux
Основы программирования в Linux читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
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("nn"); printf("1 - add new CDn"); printf("2 - search for a CDn"); printf("3 — count the CDs and tracks in the databasen"); printf("q — quitn"); 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_confirmstatic 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_entryfgetsstatic int enter_new_cat_entry(cdc_entry *entry_to_update) { cdc_entry new_entry; char tmp_str[TMP_STRING_LEN + 1]; memset(&new_entry, ' ', 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: "); (void)fgets(tmp_str, TMP_STRING_LEN, stdin); strip_return(tmp_str); strncpy(new_entry.artist, tmp_str, CAT_ARTIST_LEN - 1); printf("nNew catalog entry entry is :-n"); display_cdc(&new_entry); if (get_confirm("Add this entry ? ")) { memcpy(entry_to_update, &new_entry, sizeof(new_entry)); return(1); } return(0);}Обратите внимание на то, что вы не применяете функцию
getsgets10. Теперь вы переходите к функции
enter_new_track_entriesstatic void enter_new_track_entries(const cdc_entry *entry_to_add_to) { cdt_entry new_track, existing_track; char tmp_str[TMP_STRING_LEN + 1]; int track_no = 1; if (entry_to_add_to->catalog[0] == ' ') return; printf("nUpdating tracks for %sn", 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 descriptionn"); while(1) {
