0

这是我在这个网站上发现的一个问题,但回答与我认为我的问题没有直接关系。我有点尴尬,因为我还是个业余爱好者。我在询问用户他们想输入多少个 GPA。然后我要求输入每个索引。问题是每个索引都返回 0。所以我很确定我搞砸了变量类型或者可能是我增加索引的方式。这是一个家庭作业问题,我更多的是寻求指导而不是完全放弃。

#include<stdio.h>

main()
{
      char Rspns; 
      int i, toCount, Total;
      float GPA[toCount];

      printf("\n\tYou can average up to 30 GPAs.");
      printf("\n\tPlease choose how many GPAs you would like to average:");
      scanf(" %d" , &toCount); 

      //assign how many indexes array should have
      for(i = 0; i<toCount; i++)
            GPA[i] = i++;


            do
                {

                system("cls");
                printf("\n\nEnter a GPA:");
                scanf(" %f" , &GPA); 
                printf(" %f" , GPA[i]);
               Total += GPA[i];

               getch();
               system("cls");
               printf("\n\n\tWould you like to average the current amount of GPA's?");
               printf("\n\nY/N: ");
               scanf(" %c" , &Rspns);

                       if(Rspns == 'y' || Rspns == 'Y')
                               {

                               Total = Total / toCount;
                               printf("The average of those GPAs is %.1f" , Total);
                               getch();

                               }// end response

                }while(i<=toCount);//end forCount
                Total = Total / toCount;


 } 
4

4 回答 4

0

这个

scanf(" %f" , &GPA); 

绝对不是您想要做的:记住,数组和指针在 C 中密切相关 -请参阅这个 SO answer

scanf(" %f" , &(GPA[i]) ); 

将值扫描到数组的第 i 个元素中

于 2012-10-18T22:27:47.290 回答
0

我认为您应该扫描到特定的浮点数,而不是扫描到整个数组

scanf("%f", &GPA[i]);

另外,检查你的类型printf,编译器会发出警告。

于 2012-10-18T22:33:06.043 回答
0
int i, toCount, Total;
float GPA[toCount];

toCount此时未初始化。

Total += GPA[i];

同样在这里,Total从一个不确定的值开始。

于 2012-10-18T22:19:01.657 回答
0

将 GPA 数组初始化为固定大小并验证 toCount 介于 1 和最大值之间,或者在知道大小后使用内存分配函数 malloc 或 calloc 动态分配 GPA 数组(完成后释放)。

我无法弄清楚你在说“分配多少索引数组应该有”的地方要做什么,但是没有必要将值输入到你将随后覆盖的数组中(你可以使用如上所述的 calloc将它们全部初始化为零)。请注意,您应该扫描到 GPA 数组的第 i 个元素 (&GPA[i]),而不是扫描到始终是第一个元素的 &GPA。

另外,请注意 i++,因为您在每个循环中将 i 递增两次。尽管您的代码的那部分是不必要的,但总的来说这是一个需要注意的陷阱。

于 2012-10-18T22:30:46.743 回答