-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:此代码是一个示例。它使代码难以阅读。您应该通过从ratingCounters. 其中一个值应该是ratingCounters; 另一个数组元素基于从 计算的值ratingCounters

于 2012-10-29T01:26:10.233 回答