У меня есть класс книги, в котором есть заголовок, автор, авторское право, номер ISBN и выписка для объекта книги. Однако при запуске программы я получаю ошибку во время выполнения. После того, как пользователь вводит название и нажимает клавишу ввода, программа пропускает вниз, показывая остальную часть выходов, а затем завершает работу программы, давая ошибку времени выполнения.Ошибка выполнения, возможная проблема ввода?
Я пытался поймать исключение, но ничего не получил.
Код:
#include "std_lib_facilities.h"
class Book{
public:
string what_title();
string what_author();
int what_copyright();
void store_ISBN();
void is_checkout();
private:
char check;
int ISBNfirst, ISBNsecond, ISBNthird;
char ISBNlast;
string title;
string author;
int copyright;
};
string Book::what_title()
{
cout << "Title: ";
cin >> title;
cout << endl;
return title;
}
string Book::what_author()
{
cout << "Author: ";
cin >> author;
cout << endl;
return author;
}
int Book::what_copyright()
{
cout << "Copyright Year: ";
cin >> copyright;
cout << endl;
return copyright;
}
void Book::store_ISBN()
{
bool test = false;
cout << "Enter ISBN number separated by spaces: ";
while(!test){
cin >> ISBNfirst >> ISBNsecond >> ISBNthird >> ISBNlast;
if((ISBNfirst || ISBNsecond || ISBNthird)<0 || (ISBNfirst || ISBNsecond || ISBNthird)>9)
error("Invalid entry.");
else if(!isdigit(ISBNlast) || !isalpha(ISBNlast))
error("Invalid entry.");
else test = true;}
}
void Book::is_checkout()
{
bool test = false;
cout << "Checked out?(Y or N): ";
while(!test){
cin >> check;
if(check = 'Y') test = true;
else if(check = 'N') test = true;
else error("Invalid value.");}
}
int main()
{
Book one;
one.what_title();
one.what_author();
one.what_copyright();
one.store_ISBN();
one.is_checkout();
keep_window_open();
}
Не уверен, что эта проблема может быть. Любая помощь приветствуется, спасибо.
Выходной пример:
Название: Пролетая над гнездом кукушки (следующие строки на самом деле не разнесены между ними и все вывода сразу) Автор:
Copyright Год:
Введите номер ISBN, разделенный пробелами:
Это приложение попросило Runtime прекратить его необычным способом. Для получения дополнительной информации обратитесь в службу поддержки.
Также не беспокойтесь о функциях keep_window_open и ошибок. Они являются частью std_lib_facilities.h и, скорее всего, не вызывают проблемы. Ошибка вызывает сообщение об ошибке, если возникла проблема.
Что такое keep_window_open? –
Как насчет отображения всего необходимого кода (как предлагает Алекс, keep_window_open), а также отображения ввода/вывода вашей программы, чтобы мы могли точно видеть, что печатается и где оно терпит неудачу. – Tom
Я просто сделал быстрый google std_lib_facilities.h, и это для курса ... у него есть функция keep_window_open: http://www.stroustrup.com/Programming/std_lib_facilities.h – Tom