未初始化的错误

时间:2013-10-16 21:49:43

标签: c++

我需要做些什么来修复程序中未初始化的错误?该程序假设打印一个数字具有的除数,但仍然显示错误,表示变量c未初始化。

/*
/ Name: Ralph Lee Stone
/ Date: 10/10/2013
/ Project: RLStone3_HW_08
/ Description: This program gets a positive value and determines the number of divisors    it has.
*/
#include <iostream>
using namespace std;

int DivisorCount(int x)
{
  int counter = 0;
  for(int c; x < c; c++)
  {
    if (x%c==0)
     counter++;
  }
  return counter;
}
int main()
{
  int x;
  cout << "Please a positive value: ";
  cin >> x;
  cout << x << "has this many divsors: " << DivisorCount(x);
}

5 个答案:

答案 0 :(得分:5)

您需要使用某个值初始化它:

for(int c = 1; x < c; c++)
//        ^^^ here

另外,您的意思是写c < x而不是x < c吗?

答案 1 :(得分:2)

c for 循环中有一个不确定的值:

for(int c; x < c; c++)
        ^

您需要将其初始化为一个值,例如:

for(int c=2; x < c; c++)

它需要大于0可能为2,因为你可能不希望1作为除数),因为你在模数运算中使用它:

if (x%c==0)
根据{{​​3}}部分0 乘法运算符 4

5.6模数为undefined behavior

  

[...]如果/或%的第二个操作数为零,则行为未定义。[...]

看起来您可能已经翻转了结束条件,它应该从c < x而不是x < c开始。

答案 2 :(得分:1)

for(int c; x < c; c++) // what do you think is the value of c initially?
                       // and when do you think the loop will stop?

编辑我不知道你对未解决的外部错误的意思。如果我纠正你的错误

for(int c=1; c<x; c++) 

它编译并给出了合理的结果:5有1个除数,9有2,8有3,12有5。

答案 3 :(得分:1)

您没有给c

提供任何初始值
for(int c; x < c; c++)

更改为

for(int c=0; x < c; c++) //assign a value

答案 4 :(得分:1)

c 未初始化

for(int c; x < c; c++)

这声明(但初始化)c,然后立即访问它以测试是否x < c