如何停止阅读C中的输入和分析数据

时间:2017-04-02 03:44:51

标签: c arrays scanf

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

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

我认为我的逻辑正确并且我的代码编译但是当我尝试生成报告时它会一直返回错误。有什么线索可能是什么问题?

这是我到目前为止的代码:

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;

}

1 个答案:

答案 0 :(得分:0)

您连续两次从标准输入读取,我认为您不想这样做。也许尝试将输入读取循环中的第二个 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;
}

在我完成这些更改后,您的代码完美运行:)

library(ggplot2)
library(dplyr)

myData <- iris %>% group_by(Species) %>% summarise(MeanSL =mean(Sepal.Length))
typeof(myData$Species)
ggplot(data=myData,aes(x=Species, y=MeanSL)) + geom_point()
myData$Species<- factor(myData$Species, levels=myData$Species[order(- myData$MeanSL)], ordered=TRUE)
ggplot(data=myData,aes(x=Species, y=MeanSL)) + geom_point()