如何获得一个数组来读取用户输入,然后根据特定数字输出



因此,现在程序将从最大输出到最小,但是响应数量是错误的。似乎它仅输出最后一个正确的连续放置响应。代码是最后的。

它的作用:

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 Responsesn");
    printf("------            -------------------");
    for (ratingCounters = MAX_RESPONSE_VALUE; ratingCounters >= MIN_RESPONSE_VALUE; --ratingCounters)
    {
        printf("n%3d %23d", rating[RESPONSE_VALUE], rating[Response]);
    }
}

您的数组索引从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计算的值上低音。

从您所知道的开始,没有预期的打印输出。验证您的代码可以执行您的期望。RESPONSE_VALUEResponse的值是多少?

最新更新