gpt4 book ai didi

c++ - 无法找出以下程序中的运行时错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:09 24 4
gpt4 key购买 nike

我正在解决 ArithmaticII .我得到以下输入的正确输出

输入:4

1 + 1 * 2 =

29/5 =

103 * 103 * 5 =

50 * 40 * 250 + 791 =

输出:

4

5

53045

500791

我得到了正确的输出,但是当我将我的解决方案提交给 spoj 时,我出现 SIGABRT 运行时错误,由于溢出问题,我正在使用 stoll,当我尝试调试我的程序时,一切似乎都运行良好。

注意->它也可能包含空格以提高可读性。

这一行对我来说看起来很可疑,因为我的程序在我不提供时停止(运行时错误)输入中的空间 (1 * 1+2=)在抛出“std::invalid_argument”实例后调用终止
什么():停止
请帮助我做错了什么?

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
int t;
string str;
cin >> t;

while (t--) {


///using cin.ignore() as input as preceded by a single line
cin.ignore();
getline(cin, str, '\n');
stringstream split(str);
///now use getline with specified delimeter to split string stream
string intermediate;
int flag = 0;
long long int ans=1;
while (getline(split, intermediate, ' ')) {
if (intermediate == "=") {
cout << ans<<"\n";
break;

}
if (intermediate == "*") {
flag = 1;
continue;
}
else if (intermediate == "/") {
flag = 2;
continue;
}
else if (intermediate == "+") {
flag = 3;
continue;
}
else if(intermediate == "-"){
flag = 4;
continue;
}
if (flag == 1) {
ans *= stoll(intermediate);
}
else if (flag == 2) {
ans /= stoll(intermediate);
}
else if (flag == 3) {
ans += stoll(intermediate);
}
else if (flag == 4) {
ans -= stoll(intermediate);
}
else if (flag == 0) {
ans = stoll(intermediate);
}

}
}
}

最佳答案

完全使用您在上面发布的输入:

4

1 + 1 * 2 =

29 / 5 =

103 * 103 * 5 =

50 * 40 * 250 + 791 =

我能够重现您的错误:

terminate called after throwing an instance of 'std::invalid_argument'
what(): stoll
Aborted

我敢打赌,您删除了示例输入中的换行符以简化操作——不管怎样,这就是您的代码看起来的样子。您正在执行 getline 并提取与第一个输入中告诉您的一样多的行。这意味着您将拉出一个空行(intermediate 将是一个空字符串)并且您将尝试处理它。

当您尝试调用 stoll("") 时会发生什么?你遇到的错误!

可以尝试检查是否有空行然后继续,例如:

getline(cin, str, '\n');
if(str.empty()) {
t++; //we didn't actually do anything, so increment t
continue;
}
stringstream split(str);
...

或者,您可以利用 >>> 运算符在遇到空格时已经停止的事实(并吃掉所有可以到达下一个可食用字符的空格)。因此,您可以继续阅读,而不是一次阅读一行,直到遇到 = 字符。

关于c++ - 无法找出以下程序中的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54658002/

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