【问题标题】:How to stop reading input and analyze data in C如何停止读取输入并在 C 中分析数据
【发布时间】:2017-04-02 03:44:50
【问题描述】:

我需要在 C 中创建一个代码,该代码读取一对数字的列表,第一个数字是产品编号(介于 1 和 和 由输入确定的产品总数之间),第二个数字是从 1-10 评分并将其存储在二维数组中。数组中从 1 开始的行是产品编号,第 1-10 列是评级。第 11 列是星级总数,第 12 列是评分总数。我必须使用 scanf 读取值,当 scan()!=2 时,循环应该停止并生成报告。

报告应为每个产品列出每个值的评分数量(即 2 个 5 星评分、17 个 10 星评分等)以及平均评分。

我认为我的逻辑正确并且我的代码可以编译,但是当我尝试生成报告时它不断返回错误。任何线索可能是什么问题?

这是我目前的代码:

int productStar[][13] = {0};
int i = 0;
int product = 0;
int stars = 0;
int howMany = 0;
int ratings = 0;
float avg = 0;
int sum = 0;

printf("How many unique products?\n");
scanf("%d", &howMany);

printf("Please enter product # and stars\n");

while(1)
{
    scanf("%d %d", &product, &stars); /* Reads in two values; first is product number, second is rating */

    if (scanf("%d %d", &product, &stars) != 2) /* kills the loop */
    {
        printf("Hi from the inside\n");
        break;
    }


    productStar[product][stars] += 1; /* adds tally to specific product rating */

    productStar[product][11] += stars; /* increments total number of stars; used later to find avg */

    productStar[product][12] += 1; /* increments how many ratings */   

}

for (int product = 0; product <= howMany; ++product)
{
 for (int stars = 0; stars <= 10; ++stars)
    {
       avg = productStar[product][11]/productStar[product][12];

        printf("Product %d Information:\n", product);
        printf("1 star: %d\n", productStar[product][1]);
        printf("2 star: %d\n", productStar[product][2]);
        printf("3 star: %d\n", productStar[product][3]);
        printf("4 star: %d\n", productStar[product][4]);
        printf("5 star: %d\n", productStar[product][5]);
        printf("6 star: %d\n", productStar[product][6]);
        printf("7 star: %d\n", productStar[product][7]);
        printf("8 star: %d\n", productStar[product][8]);
        printf("9 star: %d\n", productStar[product][9]);
        printf("10 star: %d\n", productStar[product][10]);
        printf("Average rating: %2.2f out of 10 (%d ratings total).\n", avg, ratings);
        printf("--------------------\n");
    }
}

for (product = 0; product <= howMany; ++product)
{
    sum += productStar[product][12];
    /* Sum of all ratings */
}

printf("%d product ratings evaluated in all.\n\n", sum);


return 0;

}

【问题讨论】:

  • 所有 printf("1 star: %d\n", productStar[product][1]); 行都可以在 for 循环中只替换为一个。
  • 你得到什么样的错误信息?我认为这可能与您的 int productStar[][13] = {0}; 初始化有关...

标签: c arrays scanf


【解决方案1】:

您连续两次从标准输入读取数据,我认为您不想这样做。也许尝试将输入读取循环中的第二个scanf 更改为检查产品和星号是否不是空字符串的语句:

  while(1) {
        scanf("%d %d", &product, &stars); /* Reads in two values; first is product number, second is rating */

        if (product == '\0' || stars == '\0') /* kills the loop */
        {
            // Break out of input loop and process data.
            break;
        }
  }

  // Processing code.

另外,检查除以零是个好主意:

if (productStar[product][12] != 0) {
    avg = productStar[product][11]/productStar[product][12];
}

在我进行这些更改后,您的代码运行良好:)

#include <stdio.h>

int productStar[][13] = {0};
int i = 0;
int product = 0;
int stars = 0;
int howMany = 0;
int ratings = 0;
float avg = 0;
int sum = 0;

int main(void) {
  printf("How many unique products?\n");
  scanf("%d", &howMany);

  printf("Please enter product # and stars\n");

  while(1)
  {


      scanf("%d %d", &product, &stars); /* Reads in two values; first is product number, second is rating */

      if (product == '\0' || stars == '\0') /* kills the loop */
      {
          break;
      }


      productStar[product][stars] += 1; /* adds tally to specific product rating */

      productStar[product][11] += stars; /* increments total number of stars; used later to find avg */

      productStar[product][12] += 1; /* increments how many ratings */

  }

  for (int product = 0; product <= howMany; ++product)
  {
   for (int stars = 0; stars <= 10; ++stars)
      {
        if (productStar[product][12] != 0) {
           avg = productStar[product][11]/productStar[product][12];
        }

          printf("Product %d Information:\n", product);
          printf("1 star: %d\n", productStar[product][1]);
          printf("2 star: %d\n", productStar[product][2]);
          printf("3 star: %d\n", productStar[product][3]);
          printf("4 star: %d\n", productStar[product][4]);
          printf("5 star: %d\n", productStar[product][5]);
          printf("6 star: %d\n", productStar[product][6]);
          printf("7 star: %d\n", productStar[product][7]);
          printf("8 star: %d\n", productStar[product][8]);
          printf("9 star: %d\n", productStar[product][9]);
          printf("10 star: %d\n", productStar[product][10]);
          printf("Average rating: %2.2f out of 10 (%d ratings total).\n", avg, ratings);
          printf("--------------------\n");
      }
  }



  for (product = 0; product <= howMany; ++product)
  {
      sum += productStar[product][12];
      /* Sum of all ratings */
  }

  printf("%d product ratings evaluated in all.\n\n", sum);


  return 0;
}

【讨论】:

  • 你是如何让它工作的?我发现每当我编译时,数组中的某些值都不会初始化为零。此外,代码也没有计算平均值。
猜你喜欢
  • 1970-01-01
  • 2019-10-31
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多