是什么让这个程序崩溃?
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);
行中将整数除以零。 s
和 60
都是整数,所以当您使用整数除法除法 s=10
和 60
时,您得到 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))
.
因为 %60
,s
将始终是 0 到 59(含)之间的整数。在下一行,s/60
将始终小于 1,因此被截断为 0
,因为它是整数除法。 ats
除以这个结果除以 0
我已尝试查看我的代码,但找不到问题所在。我做错了什么 ?虽然我认为是 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);
行中将整数除以零。 s
和 60
都是整数,所以当您使用整数除法除法 s=10
和 60
时,您得到 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))
.
因为 %60
,s
将始终是 0 到 59(含)之间的整数。在下一行,s/60
将始终小于 1,因此被截断为 0
,因为它是整数除法。 ats
除以这个结果除以 0