2013-10-16 208 views
0

我需要做什麼來修復我的程序未初始化的錯誤?該程序假設打印一個數字的除數,但一直顯示一個錯誤,說明變量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

你需要用一定的參考價值初始化:

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

也,你的意思寫c < x而不是x < c

+0

試過了,它給了我無法解決的外部錯誤。 –

+2

@ Ralphs17看起來像另一個問題。你可以再詳細一點嗎?發佈確切的錯誤消息。 –

+0

@ Ralphs17,通過引入編譯器錯誤修復鏈接器錯誤使您的問題加倍。 – chris

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

+0

當我將「int c」更改爲「int c = 0;」時,程序顯示無法解析的外部錯誤 –

+0

'c = 0'不是一個好主意(我從來沒有這樣建議!) – Walter

1

你不給任何初始值到c

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

變化

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

c初始化:

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

這聲明(但不初始化)c,然後立即訪問它來測試是否x < c

2

Ç循環有一個不確定的值在這裏:

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

你需要把它初始化爲一個值,例如:

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

這將需要更大比0或許是2,因爲你可能不想要1作爲除數),因爲你在模數運算h中使用它ERE:

if (x%c==0) 

和模量由0undefined behavior具體根據draft C++ standard5.6乘法運算符段落說:

[...]如果/或%所述第二操作數[...]

它看起來像你可能翻了翻你的結束條件,它應該從c < x而不是x < c

+0

@Walter我確實已經編譯並運行了它,結果和預期的一樣,除了兩個開始之外,我的建議與Daniel的完全相同,而且你不需要他的回答似乎有問題,所以我可以在這裏做的不多。如果你不能有建設性的話,我只會將這條評論帖子標記爲刪除b/c,它沒有任何好處是模糊的。 –