如果我没有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;
}
}
答案 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
不可接受,您可以使用您喜欢的任何错误处理。