C ++如果命令读取为true,则为false

时间:2016-08-18 02:23:07

标签: c++ if-statement

我一直在努力编写一个程序,为我编号,但我的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所以我很困惑。

1 个答案:

答案 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;装置