-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< count です。

于 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

要素を設定する前に、おそらく最大長を設定し、配列 multiples[] を初期化する必要があります...

例えば

int multiples[100] = { 0 };

また、カウントが 100 に達したときに要素の設定を停止することもできます。つまり、

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

あなたのコードには、私を少し悩ませていることが 1 つあります。

次の行があなたの配列を割り当てるかどうかはわかりません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 に答える