0

1 ~ 10 の範囲で 1,000 個の乱数を生成するプログラムを作成しました。次に、各数値が何回生成されたかを教えてもらいたいのです。しかし、何らかの理由でこのプログラムを実行すると、すべての数値が 0 になります。

私が欠けているものを知っている人はいますか?

#include <stdio.h>
#include <stdlib.h>
void print(const int array[], int limit);

#define SIZE 1000
int main(void)
{
int i;
int arr[SIZE];

for (i = 0; i < SIZE; i++)
    arr[i] = rand() % 10 + 1;

print(arr,SIZE);

return 0;
}

void print(const int array[], int limit)
{ 
int index, count1 = 0, count2 = 0, count3 = 0, count4 = 0, count5 = 0, count6 = 0,         
count7 = 0, count8 = 0, count9 = 0, count10 = 0;

for (index = 0; index < limit; index++)
{
    switch (array[index])
    {
        case '1' : count1++;
                  break;
        case '2' : count2++;
                  break;
        case '3' : count3++;
                  break;
        case '4' : count4++;
                  break;
        case '5' : count5++;
                  break;
        case '6' : count6++;
                  break;
        case '7' : count7++;
                  break;
        case '8' : count8++;
                  break;
        case '9' : count9++;
                  break;
        case '10' : count10++;
                 break;
        default : break;
    }

}
 printf("There were %d 10s, %d 9s, %d 8s, %d 7s, %d 6s, %d 5s, %d 4s, %d 3s, %d 2s, %d                         
 1s.", count10, count9, count8, count7, count6, count5, count4, count3, count2, count1);
}
4

2 に答える 2

4

case ステートメントで数字を一重引用符で囲む必要はありません。一重引用符を含めて文字リテラルを作成しています。それらを外すだけで、意図したとおりの整数リテラルが得られます。

于 2013-03-19T23:07:17.720 に答える
0

数値(配列に格納されている)を文字リテラル「1」、「2」などと比較しています。さらに、配列を使用して印刷を実装する方がおそらく簡単です。

void print(const int array[], int limit)
{ 
    int index;
    int count[11] = {0};

    for (index = 0; index < limit; index++)
    {
        count[array[index]]++;
    }
    printf("There were %d 10s", count[10]);
    for (index = 10; index > 0; index--)
    {
        printf(" %d %ds%c", count[index], index, (index > 1)?',':'.');
    }
}
于 2013-03-19T23:18:48.243 に答える