-1

该程序的目标是在“input_value_1”到“input_value_2”的范围内找到 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;

}

4

5 回答 5

2
int multiples[100]; 

应该修复它。此外,i< 在显示屏上计数。

于 2012-12-06T03:00:01.727 回答
0

首先,您至少应该将倍数初始化为特定大小,甚至避免使用它。其次,您的代码中还有另一个错误:

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

应该:

for(i=0; i<count; i++)
    {
        printf("%i\n", multiples[i]);
    }
于 2012-12-06T04:03:34.630 回答
0

可能应该在尝试设置它的元素之前设置最大长度并初始化数组倍数 []...

例如

int multiples[100] = { 0 };

您还希望在达到 100 时停止设置元素,即

for(y = input_value_1;y <= input_value_2 && count < 100; y++) {  }
于 2012-12-06T02:58:17.327 回答
0

你的代码有一点让我有点困扰。

我不知道以下行是否分配了您的multiples数组:(我的 c 语法生锈了)

int multiples[] = {};

但是,我很确定那条线不会给它无限量的内存。至少。

我的直觉是,如果你输入一个足够大的范围,你会很快得到一个分段错误。

于 2012-12-06T02:58:43.240 回答
-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);
    }
于 2012-12-06T03:08:09.853 回答