为什么>>运算符在不同的编译器上显示不同的结果?
Why >> operator shows different results on different compilers?
我的代码在不同的 IDE 上显示不同的结果。对于我的 IDE 上的输入1//2
,它会显示输入格式错误,但在其他 IDE 上它会抛出DivisionByZero
。
我已经尝试包括in.peek() == '/'
即使这样做没有意义,但无济于事。
struct DivisionByZero : public exception {
const char * what() const throw() {
return "Zero Denominator";
}
};
R 的构造函数
R::R(int n, int d)
{
if (d==0)
{
throw DivisionByZero();
}
n_ = n * (d / abs(d));
d_ = abs(d);
}
操作员>>
std::istream &operator>>(std::istream &in, R &r){
int n, d;
in >> n;
if (in.peek() == '/')
{
in.ignore();
if ( (in.peek() < '0' || in.peek() > '9') ){
in.setstate(ios_base::failbit);
}
in >> d;
r = R(n, d);
}
return in;
}
main(( 代码:
R n1, n2;
char op;
try
{
while (cin >> n1 >> op >> n2) {
switch (op) {
case '+':
cout << n1 + n2 << endl;
break;
case '-':
cout << n1 - n2 << endl;
break;
case '*':
cout << n1 * n2 << endl;
break;
case '/':
cout << n1 / n2 << endl;
break;
}
}
}
catch(DivisionByZero& e){
cerr << e.what();
return 1;
}
if (cin.fail())
{
cin.clear();
cerr << "Input format error before '" << char(cin.peek()) <<"'";
return 2;
}
return 0;
预期输出 : Input format error before '/'
实际输出 : Zero Denominator
in >> d
失败,因为流中的字符无法解析为整数。 d
仍未初始化。无论R(n, d)
对d
做什么,都会通过访问未初始化的对象来表现出未定义的行为。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- 从数据库实时显示QT c++中的数据
- EASTL矢量<向量<int>>连续的
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- C++射线示踪剂ppm表示没有足够的数据来显示图像
- 显示基于用户输入的整数的字符
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 密码登录程序将永远循环并显示不正确的结果