2017-09-24 26 views
0

因此,我正在嘗試製作一個完成displayMenu()所有任務的成績簿。但是當我去查看成績時,我甚至無法獲得學生證。請幫忙。成績簿,數組未保存

一切都在這裏初始化

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#define PAUSE system("pause") 
#define CLS system("cls") 
#define EXAMS 100 
#define STUDENT 4 
void displayArray(float grades[STUDENT][EXAMS]); 
void newStudent(float grades[STUDENT][EXAMS]); 
void displayStudentAverage(float grades[STUDENT][EXAMS]); 

int main() { 
float grades[STUDENT][EXAMS]; 

這是一切的程序應該做

displayMenu(grades, 0); 

} // end of main; 
int displayMenu(float grades[STUDENT][EXAMS]) { 
printf("\t \t MENU \t \t"); 
printf("Enter Corresponding Number\n"); 
printf("1.Enter New Student\n"); 
printf("2.Change Existing Grades\n"); 
printf("3.View All Grades\n"); 
printf("4.View Average Score Per Student\n"); 
printf("5.View Average Score Per Exam\n"); 
printf("6.View Average Score For The class\n"); 
printf("7.CLEAR GRADEBOOK\n"); 
printf("8. Save Gradebook\n"); 
printf("8.Exit\n"); 
int choice = 0; 
scanf("%d", &choice); 
switch (choice) { 
case 1: 
    newStudent(grades, 0); 
    CLS; 
    displayMenu(grades,0); 
    break; 
case 2: 
    break; 
case 3: displayArray(grades, 0); 
    CLS; 
    displayMenu(grades,0); 
    break; 
case 4: 
    displayStudentAverage(grades, 0); 
    break; 
case 5: 
    break; 
case 6: 
    break; 
case 7: 
    break; 
case 8: 
    exit(0); 
    break; 
case 9: 
    exit(0); 
    break; 
default: printf("You Have entered an incorrect number"); 
    PAUSE; 
} 
} 

這是顯示

void displayArray(float grades[STUDENT][EXAMS]) { 

printf("%.1f\t", grades[STUDENT][EXAMS]); 

} 

我想添加值的等級到這裏的陣列

void newStudent(float grades[STUDENT][EXAMS]) { 
     float addgrade; 
     printf("Please Enter Student ID: "); 
     scanf("%f", &grades[STUDENT][EXAMS]); 
     printf("Enter four exam grades, use comma to split grades"); 

     scanf("%f", addgrade); 
     grades[STUDENT][EXAMS] += addgrade; 

    PAUSE; 
    CLS; 



} 

void displayStudentAverage(float grades[STUDENT][EXAMS]) { 
int sum, loop; 
float avg; 

sum = avg = 0; 

for (loop = 0; loop < 10; loop++) { 
    sum = sum + grades[loop]; 
} 

avg = (float)sum/loop; 

printf("Average of array values is %.2f", avg); 

} 
+0

爲什麼你傳遞數組的參數,如果它是一個格洛無論如何,首先是bal數組? – Annabelle

+0

我想將數組移到main,但它不喜歡它。 –

+0

不要緊,我把它放在主,但陣列仍然沒有保存我輸入的任何東西,當我要求ID –

回答

1

首先,它總是好的檢查編譯器警告得到一些提示,可能的錯誤...

這裏的代碼問題的列表:

  • 沒有包含的頭文件
  • displayMenu原型缺少
  • grades陣列用於與不一致的類型(float/int
  • grades[STUDENT][EXAMS]grades陣列越界訪問(如果定義大小爲5的陣列,例如,你只能訪問位置0至4)
  • main需要返回類型爲int
  • 功能newStudent有返回類型void但代碼嘗試與return &grades[STUDENT][EXAMS];

除此之外,代碼應該工作返回的東西...

+0

讓我知道,如果有什麼不清楚...... –

+0

所有有意義的,並已應用於代碼。我如何才能在學生證上添加新成績? –

+0

在newStudent中,你將不得不使用由scanf讀取的學生ID作爲數組索引... –