2016-03-31 76 views
-1

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

的代码如下:

#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

为什么你没有初始化repNum?你必须让它工作。 –

+0

其他人都诊断出您的问题。但是另外,你已经声明了'numReps'的两个单独的副本。这不会在这里造成问题,但如果您不花时间理解它,它将在您将来的代码中出现。因为'numReps'已经被声明了,'for''循环应该开始'for(numReps = 0; ...' – TonyK

回答

2

当执行条件if (repNum >0 && repNum < 21),可变repNum仍然未初始化的,这就是为什么你会得到错误。

0

您应该初始化repNum。否则,你不能比较repNum大于0,因为repNum没有价值。如果你想这样,只需设置repNum -1
顺便问一句if语句中的repNum只会让你感觉到它的值来自程序的另一个点。你在这里是否缺少代码?

0

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

在你的情况下,你还没有初始化repNum,这可能会分配一些垃圾值。然后,您继续检查这个垃圾值是否与if语句中的某个表达式相关,这可能会导致未定义的行为。

1

你被using an unitialised variable遇到未定义行为:

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

repNum从未用值初始化!你需要给它一个价值。

int repNum = 0; 

你也应该考虑使用auto因为它会迫使你把它初始化为一个值:

auto repNum = 0u; 

如果您尝试以下

auto repNum; 

你会得到一个编译错误。

就目前而言,编译时应该会收到警告。如果你打开你的编译器警告设置,你应该得到这个警告。

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是不可接受的,你可以使用你喜欢的任何错误处理。