gpt4 book ai didi

c++ - 运行时错误,可能是输入问题?

转载 作者:行者123 更新时间:2023-11-28 04:00:12 25 4
gpt4 key购买 nike

我有一个书籍类,它获取书籍对象的标题、作者、版权、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();
}

不确定是什么问题。感谢您的帮助,谢谢。

输出示例:

标题:一只飞过杜鹃巢(下一行实际上并没有间隔,并且一次输出所有)作者:

版权年份:

输入 ISBN 号,以空格分隔:

此应用程序已请求运行时以异常方式终止它。请联系支持以获取更多信息。

也不要担心 keep_window_open 和 error 函数。它们是 std_lib_facilities.h 的一部分,很可能不会导致问题。如果遇到问题,Error 只会输出一条错误消息。

最佳答案

这里的问题是 C++ 输入流不会删除它们遇到的格式错误的输入。换句话说,如果您尝试读入一个数字并且流包含例如字符“x”(不是数字),则该字符不会从输入流中删除。此外,如果我没记错的话,这也会使输入流处于错误状态,导致格式正确的输入也失败。虽然有一种机制可以测试输入流的状态并删除格式错误的输入并清除错误标志,但我个人发现始终读入字符串(使用“>>”或“getline”)然后解析更简单字符串。例如,对于数字,您可以使用“strtol”或“strtoul”函数。

关于c++ - 运行时错误,可能是输入问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1141408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com