-1

そのため、現在、プログラムはMAXからMINに正しく出力しますが、応答の数が間違っています。最後の正しい連続配置された応答のみを出力するように見えます。コードは最後です。

内容:

Enter a integer rating between -20 and 5 for the product: 5
Enter a integer rating between -20 and 5 for the product: 4
Enter a integer rating between -20 and 5 for the product: 3
Enter a integer rating between -20 and 5 for the product: 2
Enter a integer rating between -20 and 5 for the product: 3
Enter a integer rating between -20 and 5 for the product: 1

Rating            Number of Responses
------            -------------------
  5                       1
  4                       1
  3                       1
  2                       1
  1                       1
  0                       1
 -1                       1
 -2                       1
 -3                       1
 -4                       1
 -5                       1
 -6                       1
 -7                       1
 -8                       1
 -9                       1
-10                       1
-11                       1
-12                       1
-13                       1
-14                       1
-15                       1
-16                       1
-17                       1
-18                       1
-19                       1
-20                       1
Process returned 0 (0x0)   execution time : 13.643 s
Press any key to continue.

それがすべきこと:

Enter a integer rating between -20 and 5 for the product: 5
Enter a integer rating between -20 and 5 for the product: 4
Enter a integer rating between -20 and 5 for the product: 3
Enter a integer rating between -20 and 5 for the product: 2
Enter a integer rating between -20 and 5 for the product: 3
Enter a integer rating between -20 and 5 for the product: 1

Rating            Number of Responses
------            -------------------
  5                       1
  4                       1
  3                       2
  2                       1
  1                       1
  0                       0
 -1                       0
 -2                       0
 -3                       0
 -4                       0
 -5                       0
 -6                       0
 -7                       0
 -8                       0
 -9                       0
-10                       0
-11                       0
-12                       0
-13                       0
-14                       0
-15                       0
-16                       0
-17                       0
-18                       0
-19                       0
-20                       0
Process returned 0 (0x0)  execution time : 13.643 s
Press any key to continue.

別の例(正しく動作しない):

Enter a integer rating between -20 and 5 for the product: 5
Enter a integer rating between -20 and 5 for the product: 4
Enter a integer rating between -20 and 5 for the product: 22

Not within range. Try again.
You have 3 more attempts before program outputs total:2

Enter a integer rating between -20 and 5 for the product: 2
Enter a integer rating between -20 and 5 for the product: 2
Enter a integer rating between -20 and 5 for the product: 2

Rating            Number of Responses
------            -------------------
  5                       3
  4                       3
  3                       3
  2                       3
  1                       3
  0                       3
 -1                       3
 -2                       3
 -3                       3
 -4                       3
 -5                       3
 -6                       3
 -7                       3
 -8                       3
 -9                       3
-10                       3
-11                       3
-12                       3
-13                       3
-14                       3
-15                       3
-16                       3
-17                       3
-18                       3
-19                       3
-20                       3
Process returned 0 (0x0)   execution time : 8.426 s
Press any key to continue.

ここにあります...

#include <stdio.h>                                                             /* Necessary header */
#define MAX_RESPONDENTS 6
#define MIN_RESPONSE_VALUE -20                                                 /* Abbreviated MiRV */
#define MAX_RESPONSE_VALUE 5                                                   /* Abbreviated MaRV */
#define RESPONSE_VALUE 26                                                      /* Equals |(MiRV)| + |(MaRV)| + 1 */
#define STOP 3
#define BREAK 1

int main(void)
{
    CountRating();

    return 0;
}

void CountRating()
{
    int ratingCounters, rating[RESPONSE_VALUE] = {0}, Response, response;

    for (ratingCounters = 0; ratingCounters < MAX_RESPONDENTS;)
    {
        int response, stop = STOP;
        printf("Enter a integer rating between %d and %d for the product: ", MIN_RESPONSE_VALUE, MAX_RESPONSE_VALUE);
        scanf("%d", &response);

        if (response <= MAX_RESPONSE_VALUE && response >= MIN_RESPONSE_VALUE)
            stop = STOP, Response = response;
        else
        {
            int stopElse = stop;
            if (stopElse < BREAK)
                break;
            else
            {
                do
                {
                    printf("\nNot within range. Try again.\nYou have %d more attempts before program outputs total:", stop);
                    scanf("%d", &response);
                    printf("\n");
                    --stop;
                    if (stop < BREAK)
                    break;
                } while (response > MAX_RESPONSE_VALUE || response < MIN_RESPONSE_VALUE);
            }   if (stop < BREAK)
                break;
        }
        ++rating[Response];
        ++ratingCounters;

    }
    printf("\nRating            Number of Responses\n");
    printf("------            -------------------");
    for (ratingCounters = MAX_RESPONSE_VALUE; ratingCounters >= MIN_RESPONSE_VALUE; --ratingCounters)
    {

        printf("\n%3d %23d", rating[RESPONSE_VALUE], rating[Response]);

    }
}
4

2 に答える 2

1

あなたが知っていることから始めてください、プリントアウトは期待されていません。コードが期待どおりに動作することを確認します。RESPONSE_VALUEとの値は何Responseですか?

于 2012-10-29T01:24:39.870 に答える
1

配列インデックスは0から始まりますが、応答番号の範囲は-20から+5(26の値)です。だから、あなたが書くとき:

++rating[Response];

アクセスする必要のある配列要素にアクセスしていません。入力した値からMIN_RESPONSE_VALUEを引くようなことをする必要があります。

毎回同じ配列要素にアクセスしているため、出力ループは毎回同じ応答を出力しています。

for (ratingCounters = MAX_RESPONSE_VALUE; ratingCounters >= MIN_RESPONSE_VALUE; --ratingCounters)
{
    printf("\n%3d %23d", rating[RESPONSE_VALUE], rating[Response]);
}

iループインデックスと配列インデックスに;のような名前が付けられているのには理由があります。このコードは例です。コードが読みにくくなります。から計算された値でインデックスを作成する必要がありますratingCountersratingCounters値の1つは;である必要があります。もう1つは、から計算された値に基づく配列要素ratingCountersです。

于 2012-10-29T01:26:10.233 に答える