Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 添加IF语句时出错_C++ - Fatal编程技术网

C++ 添加IF语句时出错

C++ 添加IF语句时出错,c++,C++,如果我没有if语句,循环工作正常,但是一旦我添加了它,代码就不再运行了。它在构建时没有问题。我可以看出我在运行repNum时没有初始化它 代码如下: #include<iostream> using namespace std; int main() { int repNum; int prodSold; int prodPrice; int repTotal; int numReps = 0; if (repNum >0 &a

如果我没有
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;
    }
}
#包括
使用名称空间std;
int main()
{
INTREPNUM;
int PRODSELD;
国际产品价格;
勇敢的代表;
int numReps=0;
如果(repNum>0&&repNum<21)
{
对于(int numReps=0;numReps>repNum;
cin>>产品已售出;
cin>>产品价格;
repTotal=产品售出*产品价格;

cout当条件
执行(repNum>0&&repNum<21)
时,变量
repNum
仍然未初始化,这就是为什么会出现错误。

您应该初始化repNum。否则您将无法比较repNum大于0,因为repNum没有值。如果您希望这样,只需设置repNum-1

顺便说一句,如果程序的另一个点上有一个repNum的值,那么只在if语句中请求repNum是有意义的。这里是否缺少代码?

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


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

您遇到未定义的行为,原因是:

你也应该考虑使用<代码> Auto <代码>,因为它会迫使你将它初始化为一个值:

auto repNum = 0u;
如果您尝试以下方法

auto repNum;
您将得到一个编译器错误


目前的情况是,编译时应该会收到警告。如果您打开编译器警告设置,应该会收到警告。

正如您所说的,这是一个单位化变量问题。在这种情况下,您可以使用
do while
进行
If
检查。因此,使用
do while
从用户处获取所有变量的输入es,则当条件被接受时,您有权进行
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);
inti=0;
做
{
cin>>雷普纳姆;
如果(repNum>0&&repNum<21)
{
对于(int numReps=0;numReps>prodsall;
cin>>产品价格;
repTotal=产品售出*产品价格;
}
i++;
}
其他的
{

你为什么不初始化repNum?你必须这样做才能让它工作。其他人都诊断了你的问题。但是,你已经声明了
numReps
的两个独立副本。这不会在这里造成问题,但如果你不花时间理解它,它会在你未来的代码中出现。因为
numReps
已经声明了,您的
for
-循环应该开始
for(numReps=0;…
auto repNum;
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);