2015-09-18 5 views
-1

У меня проблема с выстраиванием моих оценок в соответствии с оценками учащихся. Он распечатывает баллы с правильным интервалом, но когда он получает инструкцию if для присвоения класса письма, он печатает их как ABC, а не центрируется столбцами. Любая помощь будет оценена по достоинству. Проблема заключается в функции calc_grades if if. Я не могу понять, как получить оценки выстраиваться с колоннамиВыравнивание Char в двумерном массиве

#include <stdio.h> 
#include <string.h> 

int numStus; 
int numGrades; 

void get_students(char stuNames[numStus][10]) //Get students names 
{ 
    int i; 
    int j; 
    for (i=0; i<numStus; i++) 
    { 
     printf("Enter the students name."); 
     scanf("%6s", &stuNames[i]); 
    } 

} 
void get_grades(int grades[numGrades][numStus], char stuNames[numStus] [10])//enter each students grades 
    { 
    int x; 
    int z; 
    for (x=0; x < numGrades; x++) 
    { 
    for (z = 0; z < numStus; z++) 
    { 
     printf("Enter score for %s assignment %d: ", stuNames[z],x); 
     scanf("%d", &grades[x][z]); 
    } 
    } 
} 

void calc_grades(int grades[numGrades][numStus]) 
{ 
    int sum = 0; 
    int sum2 = 0; 
    int j; 
    int k; 
    for(j = 0; j < numStus; j++) 
    { 
    for(k = 0; k < numGrades; k++) 
    { 
     sum= sum + grades[k][j]; 
     sum2 = sum/numGrades; 
    } 
    if (sum2 >= 90) 
    { 
     printf("A "); 
    } 
    if (sum2 < 90 && sum2 >= 80) 
    { 
     printf("B "); 
    } 
    if (sum2 < 80 && sum2 >= 70) 
    { 
     printf("C "); 
    } 
    if (sum2 < 70 && sum2 >= 60) 
    { 
     printf("D "); 
    } 
    if (sum2 < 60) 
    { 
     printf("F "); 
    } 
    sum = 0; 
    } 
} 
void print_report(int grades[numGrades][numStus], char stuNames[numStus][10]) 
{ 
    int i; 
    int j; 
    int k; 
    for(i = 0; i < numStus; i++) 
    { 
     printf("%6s",stuNames[i]); 

    } 
    printf("\n"); 
    for(j = 0; j < numGrades; j++) 
{ 
    for(k = 0; k < numStus; k++) 
    { 
     printf("%6i",grades[j][k]); 
    } 
    printf("\n"); 
} 

} 

int main() 
{ 
    printf("How many students?"); 
    scanf("%d", &numStus); 
    printf("How many assignments?"); 
    scanf("%d", &numGrades); 

//Ask how many students 

//Ask how many assignments 

//Initializations... 
    char stuNames[numStus][10]; 
    int grades[numGrades][numStus]; 
    char finalGrades[numStus]; 

//Get Student Names 
    get_students(stuNames); 
    get_grades(grades, stuNames); 
    print_report(grades, stuNames); 
    calc_grades(grades); 
    int x; 
    int z; 


//Get Grades 

//Calculate Final Grades 

//Print Report 

return 0; 
} 
+0

Пожалуйста, отступы код, прежде чем отправлять его здесь. – Lundin

+0

Пожалуйста, не пытайтесь использовать разметку форматирования в стенограмме; '** void' просто выглядит (и есть) неправильно. –

ответ

3

Проблема заключается в том, как вы распечатав класс в если заявления. Глядя на вашу функцию print_report, у вас есть правильное форматирование, так почему бы не сохранить ее таким же образом?

Что у вас есть:

if (sum2 >= 90) 
    { 
    printf("A "); 
    } 

Что это должно быть:

if (sum2 >= 90) 
    { 
    printf("%6c", 'A'); 
    } 
+0

Еще раз спасибо! Это сделал трюк. Очень признателен –

Смежные вопросы