我需要做些什么来修复程序中未初始化的错误?该程序假设打印一个数字具有的除数,但仍然显示错误,表示变量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);
}
答案 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
。