是什么导致这个程序崩溃

What makes this program crash?

本文关键字:程序 崩溃 是什么      更新时间:2023-10-16

我试过查看我的代码,但找不到问题。我做错了什么?虽然我认为是l=ats/(s/60)造成的。

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int ats=7,v1=12,v2=12,m1=30,m2=40,g=70,l,s;
s=abs(((v2*60+m2)-(v1*60+m1))%60);
l=ats/(s/60);
cout << l;
return 0;
}

您有一个被零整除的整数。这是C++中未定义的行为。

由于模量的原因,CCD_ 2从不大于59。

s / 60将始终为零,因为整数除法截断

由于%60s将始终是0到59(包括0和59)之间的整数。则在下一行上s/60将总是<1,因此被截断为0,因为它是整数除法。ats除以此结果为除以0

l=ats/(s/60);行中有整数除以零。s60都是整数,所以当用整数除法除s=1060时,得到0,当用ats除以0时,得到崩溃。如果您想在这种情况下避免整数除法,请使用以下任一项:

a) l=ats/(s/60.0);

b) l=ats/(static_cast<double> (s)/60);

但请注意,经过此更改后,结果将不再是int类型。如果您想在那里有一个int,您需要使用s1再次将其强制转换回int,如下所示:l=static_cast<int> (ats/(s/60.0))

s是小于60的整数。整除(s/60)得到0。因此,ats除以零。