累积成绩点平均计算器写成C.

我正在研究GPA计算器而且我是C的新手。我在Ubuntu 12中使用gvim编写此代码,并且我正在终端中使用gcc进行编译。

到目前为止这是我的代码。 我还想包括一种检查方法,以确保用户没有在函数number_subjects中输入字符(az),但不确定正确的方法。 我也相信在主函数结束时我的gpa计算公式有问题。 我还添加了一个do while语句来提示用户是否要在程序结束时再次尝试但由于某种原因,程序总是重新启动而不从用户那里获取输入。

#include #include int number_subjects(int num_sub); int main(void) { int class_grades[10]; int i; int credit_hrs[10]; int num_sub; int totalCreditHour = 0; double sum_gpaxcredit_hrs = 0; double grade_point[10]; double gpa; char subject[10][10]; char grade[10][10]; char option, y_n; do{ 

/*主菜单 */

 printf("\t*** GPA CALCULATOR ***\n\n"); printf("Please choose and option\n"); printf("[a] Calculate GPA\n[q] Quit\n"); scanf("%c", &option); switch(option){ 

/ *退出程序* /

 case 'q': return(0); break; 

/ *主题数量的函数调用* /

 case 'a': num_sub = number_subjects(num_sub); break; default: printf("Not a valid choice\n"); break; } 

/ *要求用户为每个class级命名和输入成绩* /

 for(i = 0; i <= num_sub -1; i++) { printf("\n Class %d \n", i +1); printf("\nClass name : "); scanf("%s", subject[i]); printf("Enter grade: "); scanf("%d", &class_grades[i]); printf("Enter credit hours: "); scanf("%d", &credit_hrs[i]); 

/ *成绩转换* /

 if(class_grades[i] >= 95 && class_grades[i] = 90 && class_grades[i] = 85 && class_grades[i] = 80 && class_grades[i] = 75 && class_grades[i] = 70 && class_grades[i] = 60 && class_grades[i] = 0 && class_grades[i] <= 59) { grade_point[i] = 0.0; strcpy(grade[i], "F"); } } 

/ *用于计算GPA的公式* /

 for(i = 0; i <= num_sub -1; i++) { sum_gpaxcredit_hrs = grade_point[i] * credit_hrs[i]; gpa = sum_gpaxcredit_hrs / credit_hrs[i]; } 

/ *将所有课程信息显示给用户* /

 for(i = 0; i <= num_sub -1; i++) { printf("\n%d\t%s\t\t%d\t %.2f\t\t%s\t\n", i +1, subject[i],class_grades[i], grade_point[i], grade[i]); } 

/ *打印出GPA * /

 printf("\n\n GPA is %.2f\n\n\n", gpa); printf("Would you like to try again?\n"); printf("[y] yes\n[n] no\n"); scanf("%c", &y_n); }while(y_n ='n'); printf("Goodbye!\n"); return(0); } 

/ *用户输入class级数* /

 int number_subjects(int num_sub){ do { printf("Please enter the number of classes you are taking [Max 10] \n"); scanf("%d", &num_sub); if((num_sub >10) || (num_sub 10) || (num_sub <1)); return(num_sub); } 

数组的名称本身就是一个指针(forms短语是数组的名称衰变成指向数组第一个元素的指针)。 所以你不要在那里使用&

代替

  scanf("%s", &subject[i]); 

你应该有

  scanf("%s", subject[i]); 

编辑 :刚看到你有两个错误,而不是一个错误。 第二个是因为您的grade_point是单个值而不是向量。 将其声明为double grade_point[10] (参见[10]部分)。