在IF语句中添加时出错

时间:2016-03-31 05:13:57

标签: c++

如果我没有if语句,循环工作正常,但是一旦我添加它,代码就不再运行了。它在构建时没有问题。我可以说,当我运行它时,我没有初始化repNum

代码如下:

#include<iostream>
using namespace std;

int main()
{
    int repNum;
    int prodSold;
    int prodPrice;
    int repTotal;
    int numReps = 0;
    if (repNum >0 && repNum < 21)
    {
        for(int numReps = 0; numReps <= 20; numReps ++)
        {
            cin >> repNum; 
            cin >> prodSold;
            cin >> prodPrice;
            repTotal = prodSold * prodPrice;
            cout << "Agent #" << repNum << " sold " << prodSold << " packages at $" << prodPrice << 
                " for a dollar value of $" << repTotal << endl;
        }
    }
    else
    {
        cout << "***Invalid Agent***" << endl;
    }
}

5 个答案:

答案 0 :(得分:2)

执行条件if (repNum >0 && repNum < 21)时,变量repNum仍然未初始化,这就是您收到错误的原因。

答案 1 :(得分:1)

using an unitialised variable您遇到了未定义的行为:

int repNum;
if (repNum >0 && repNum < 21)

repNum永远不会用值初始化!你需要给它一个值。

int repNum = 0;

您还应该考虑使用auto,因为它会强制您将其初始化为值:

auto repNum = 0u;

如果您尝试了以下

auto repNum;

您将收到编译器错误。

目前,编译时应该收到警告。如果你打开编译器警告设置,你应该收到警告。

答案 2 :(得分:0)

你应该初始化repNum。否则你将无法比较repNum大于0,因为repNum没有值。如果你想要它只是设置repNum -1
顺便说一下,如果你从程序的另一个点得到一个值,那么在if语句中询问repNum只会产生反应。你在这里缺少代码吗?

答案 3 :(得分:0)

非静态变量的非初始化导致变量可能被分配了一些垃圾值。

在您的情况下,您尚未初始化 repNum ,可能会为其分配一些垃圾值。然后,继续检查if语句中某些表达式的垃圾值,这可能会导致未定义的行为。

答案 4 :(得分:0)

正如你所说,这是一个酉变量问题。在这种情况下,您可以使用do while进行if检查。因此,使用do while从用户那里获取所有变量的输入,然后当条件被接受时,您有权使用for循环。

假设您想要获得20次有效输入:

int i = 0;
do
{
    cin >> repNum; 
    if (repNum >0 && repNum < 21)
    {
        for(int numReps = 0; numReps <= 20; numReps ++)
        {
            cin >> prodSold;
            cin >> prodPrice;
            repTotal = prodSold * prodPrice;
        }
        i++;
    }
    else
    {
        cout << "***Invalid Agent***" << endl;
        i--;
    }  
} while (i < 20);

您可能希望在i案例中检查else是否为负值。如果i < 0不可接受,您可以使用您喜欢的任何错误处理。