我一直在努力编写一个程序,为我编号,但我的if语句仍在运行,尽管条件是假的。在函数因子中,我使用modf将小数与整数分开并将其存储为c
。 if语句检查c = 0
是否意味着数字均匀划分。
以下是我的源代码,其结果如下。
#include <iostream>
#include <math.h>
using namespace std;
int factor(double b);
int i = 1;
int factors[] = {1};
int main()
{
int a;
double b;
cout << "Please enter a integer to Factor: ";
cin >> a;
b = a;
factor(b);
return 0;
}
int factor(double b)
{
double c;
double d;
for ( ; c != 0 ; i++)
{
cout << "for loop executed" << endl;
c = modf (b/3, &d);
cout << c << endl;
if (c = 0.00);
{
cout << 3 << endl;
factors[i] = 3;
continue;
}
c = modf (b/5, &d);
if (c = 0);
{
cout << 5 << endl;
factors[i] = 5;
continue;
}
c = modf (b/7, &d);
if (c = 0);
{
cout << 7 << endl;
factors[i] = 7;
continue;
}
c = modf (b/11, &d);
if (c = 0);
{
cout << 11 << endl;
factors[i] = 11;
continue;
}
c = modf (b/13, &d);
if (c = 0);
{
cout << 13 << endl;
factors[i] = 13;
continue;
}
c = modf (b/17, &d);
if (c = 0);
{
cout << 17 << endl;
factors[i] = 17;
continue;
}
}
return c;
}
在cmd中打印
Please enter a integer to Factor: 50
for loop executed
0.666667
3
50/3 = 16.6重复
modf of 16.6666666输出16和0.666667
0.666667不等于0所以我很困惑。
答案 0 :(得分:1)
显示的代码中存在多个错误。
double c;
for ( ; c != 0 ; i++)
c
变量未初始化,然后将其值与0进行比较。这是未定义的行为。
if (c = 0.00);
这一行有两个错误。
=
是赋值运算符,而不是比较运算符。这里if
表达式总是评估为false。
然后,右括号后面的额外分号终止if
语句。紧接着:
{
cout << 3 << endl;
factors[i] = 3;
continue;
}
这将始终执行,因为它实际上不是前面的if
语句的一部分。
==
是比较运算符。
=
是赋值运算符。
分号不遵循if()
表达式。如果是,则将其解释为空语句。
但是,问题还没有完成:
int i = 1;
int factors[] = {1};
这声明了数组factors
,包含一个值。数组的大小是1个元素。
for ( ; c != 0 ; i++)
// ...
factors[i] = 3;
这将尝试分配不存在的数组元素,在数组末尾运行并破坏内存。
我感到惊讶的是,所有这些都设法运行,进行了大量的迭代,但是,那就是&#34;未定义的行为&#34;装置