2012-12-06 51 views
-1

該程序的目標是通過「input_value_2」在「input_value_1」範圍內找到7的倍數。我很困惑,爲什麼只顯示某些號碼...爲什麼我的C程序不能列出7的倍數?

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
int input_value_1; 
int input_value_2; 
int multiples[] = {}; 
int i = 0; 
int count = 0; 
int y; 

printf("Enter a value:\n"); 
scanf("%i", &input_value_1); 
printf("\nEnter a second value:\n"); 
scanf("%i", &input_value_2); 

if(input_value_2 <= input_value_1) 
{printf("Invalid Entry\n");} 
else 
{ 
    for(y = input_value_1;y <= input_value_2; y++) 
    { 
     if(y%7 == 0) 
     { 
      multiples[i] = y; 
      i++; 
      count++; 
     } 
    } 
    for(i=0; i<=count; i++) 
    { 
     printf("%i\n", multiples[i]); 
    } 
} 

system("pause"); 
return 0; 

}

+1

除非我記錯了,'multiples'是段錯誤等待發生。 – Amadan

+0

你應該真的將該數組初始化爲能夠實際存儲數據的數組,而不是堆棧中的常量大小爲0的數組 – murgatroid99

回答

0

也許應該設置最大長度,試圖把它的元素之前初始化數組倍數[] ...

eg

int multiples[100] = { 0 }; 

你也想停下來設定元素時數達到100,即

for(y = input_value_1;y <= input_value_2 && count < 100; y++) { } 
0

有一件事對你的代碼,困擾我的一點點。

我不知道,如果下面的行分配的multiples陣列:(我的C語法生鏽)

int multiples[] = {}; 

,但我敢肯定,該行並沒有給它一個不確定的量的記憶。至少。

我的直覺說,如果你輸入一個足夠大的範圍,你會很快得到一個分段錯誤。

+0

分配給大小爲零。 – Amadan

2
int multiples[100]; 

應該修復它。另外,我在顯示屏上計數。

-1

從input_value_1到input_value_2的範圍可能非常大。 7的倍數可能會超出您的數組大小。 更好的方法應該使用矢量存儲

std::vector<int> multiples; 
for(y = input_value_1;y <= input_value_2; y++) 
    if(y%7 == 0) 
     multiples.push_back(y); 
for(i=0; i<=multiples.size(); i++) 
    printf("%i\n", multiples[i]); 

或直接打印。

for(y = input_value_1;y <= input_value_2; y++) 
    { 
     if(y%7 == 0) 
      printf("%d\n", y); 
    } 
0

首先,您至少應該將倍數初始化爲特定大小或甚至避免使用它。 其次,你有另一個bug在你的代碼:

for(i=0; i<=count; i++) 
    { 
     printf("%i\n", multiples[i]); 
    } 

應該是:

for(i=0; i<count; i++) 
    { 
     printf("%i\n", multiples[i]); 
    } 
相關問題