是什么让这个程序崩溃?

What makes this program crash?

我已尝试查看我的代码,但找不到问题所在。我做错了什么 ?虽然我认为是 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++ 中的未定义行为。

由于模数,

s 从不 大于 59。

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

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

您在第 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,你需要使用 static_cast<int> 再次将它转换回 int,如下所示:l=static_cast<int> (ats/(s/60.0)).

因为 %60s 将始终是 0 到 59(含)之间的整数。在下一行,s/60 将始终小于 1,因此被截断为 0,因为它是整数除法。 ats 除以这个结果除以 0