Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please modify my C program so it prints out the desired output correctly.( Do not just copy and paste my code as the answer, I

Please modify my C program so it prints out the desired output correctly.( Do not just copy and paste my code as the answer, I will downvote. The code needs to successfully output the desired output. )

The output from inputing the large student file should be organized and one right after the other. My code is outputting a messy output, please fix this.

Here are the program directions:

image text in transcribedHere is the output of my program(See the breaks, which shouldn't happen). Also the spacing isn't right, something is wrong:

image text in transcribedimage text in transcribedimage text in transcribed

Here is my program that needs to be modified:

#include

#include

#include

// Prototype declaration of functions

void getGrades(int ROWS, int COLS, int grades[ROWS][COLS], char students[COLS][20]);

void printGrades(int ROWS, int COLS, int grades[ROWS][COLS]);

void getStudents(int COLS, char students[COLS][20]);

void printStudents(int COLS, char students[COLS][20]);

void calcGrades(int ROWS, int COLS, int grades[ROWS][COLS], char Fgrades[]);

void printFinalGrades(int COLS, char Fgrades[]);

// File pointer

FILE *fptr;

// main function definition

int main(int argc,char **argv)

{

// To store number of students and number of assignments

if(argc

printf(" Enter the File Name As Argument ");

return -1;

}

else if(argc > 2){

printf(" Too Much Argument Please give only file name ");

return -1;

}

int stu = 0, assign = 0;

// Opens the file in read mode

// command line argument argv[1] contains the file name

fptr = fopen(argv[1], "r");

// Checks if the file pointer is NULL then display the error message and stop

if (fptr == NULL)

{

printf("Cannot open file %s ",argv[1]);

exit(0);

}// End of if condition

// Reads number of students and number of assignments from file

fscanf(fptr, "%d%d", &stu, &assign);

printf(" Number of Students = %d Number of Assignment = %d", stu, assign);

// Matrix for student names

char students[stu][20];

// Matrix for assignment marks

int grades[assign][stu];

// Array for grade

char final_grade[stu];

// Calls the functions to read data from file and calculate grade

getStudents(stu, students);

getGrades(assign, stu, grades, students);

calcGrades(assign, stu, grades, final_grade);

printf(" ");

// Calls the function to display data

printStudents(stu, students);

printGrades(assign, stu, grades);

printFinalGrades(stu, final_grade);

return 0;

}// End of main function

// Function to display final grade of all the students

void printFinalGrades(int COLS, char Fgrades[])

{

int i = 0;

// Loops till number of students

for (i = 0; i

{

// Displays grade

printf("%24c", Fgrades[i]);

}// End of for loop

printf(" ");

}// End of function

// Function to calculate grade

void calcGrades(int ROWS, int COLS, int grades[ROWS][COLS], char Fgrades[])

{

// Initializes the variables

int avg = 0;

int sum = 0;

int i = 0, j = 0;

// Loops till number of cols

for (i = 0; i

{

sum = 0;

// Loops till number of rows

for (j = 0; j

{

// Calculate total

sum += grades[j][i];

}// End of for loop

// Calculate average

avg = sum / ROWS;

// Checks if average is greater than or equals to 90

if (avg >= 90)

// Assign grade as 'A'

Fgrades[i] = 'A';

// Otherwise checks if average is greater than or equals to 80

else if (avg >= 80)

// Assign grade as 'B'

Fgrades[i] = 'B';

// Otherwise checks if average is greater than or equals to 70

else if (avg >= 70)

// Assign grade as 'C'

Fgrades[i] = 'C';

// Otherwise checks if average is greater than or equals to 60

else if (avg >= 60)

// Assign grade as 'D'

Fgrades[i] = 'D';

// Otherwise less than 60

else

// Assign grade as 'F'

Fgrades[i] = 'F';

}// End of for loop

}// End of function

// Function to display student names

void printStudents(int COLS, char students[COLS][20])

{

int i = 0;

int numA = COLS;

// Loops till number of columns

for (i = 0; i

{

// Displays name

printf("%24s", students[i]);

}

printf(" ");

}// End of function

// Function to read student names from file

void getStudents(int COLS, char students[COLS][20])

{

int i = 0,len = 0;

// Loops till number of columns

for (i = 0; i

{

// Reads name from file and stores it in students i index position

fscanf(fptr, "%s", students[i]);

// Calculates length

len = strlen(students[i]);

// Assigns null at the end

students[i][len] = '\0';

}// End of for loop

}// End of function

// Function to display grade of each student

void printGrades(int ROWS, int COLS, int grades[ROWS][COLS])

{

int i = 0, j = 0;

// Loops till number of rows

for (i = 0; i

{

// Loops till number of columns

for (j = 0; j

{

// Displays grades

printf("%24d", grades[i][j]);

}// End of inner for loop

printf(" ");

}// End of outer for loop

}// End of function

// Function to read grade from the file

void getGrades(int ROWS, int COLS, int grades[ROWS][COLS], char students[COLS][20])

{

int i = 0, j = 0;

// Loops till number of rows

for (i = 0; i

{

// Loops till number of columns

for (j = 0; j

{

// Reads grade from the file and stores it in matrix grades

fscanf(fptr, "%d", &grades[i][j]);

}// End of inner for loop

}// End of outer for loop

}// End of function

You must take the input file name on the command line Be sure to have simple error checking to be sure the file exists and was successfully opened. The input file will have the following format: First line: Number of students Second Line: Number of assignments Third Line: Student Names, space delimited Fourth+ Line(s) Grades for all students for one assignment, space delimited. Example of input file format: 2 3 Joel Sophie 100 97 78 92 62 70 Requirements: - Your program must read input from a file in the proper format, NOT stdin - Your program should accept the filename from the commandline as shown in the example below Your program should be able to handle a file of any reasonable size. (I will not use excessively long student names, but there may be MANY students and grades.) Do not just make your arrays really large, you need to dynamically allocate them. Example: $ ./a.out infile.txt Joel 100 78 62 Sophie 97 92 70 You must take the input file name on the command line Be sure to have simple error checking to be sure the file exists and was successfully opened. The input file will have the following format: First line: Number of students Second Line: Number of assignments Third Line: Student Names, space delimited Fourth+ Line(s) Grades for all students for one assignment, space delimited. Example of input file format: 2 3 Joel Sophie 100 97 78 92 62 70 Requirements: - Your program must read input from a file in the proper format, NOT stdin - Your program should accept the filename from the commandline as shown in the example below Your program should be able to handle a file of any reasonable size. (I will not use excessively long student names, but there may be MANY students and grades.) Do not just make your arrays really large, you need to dynamically allocate them. Example: $ ./a.out infile.txt Joel 100 78 62 Sophie 97 92 70

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Students also viewed these Databases questions

Question

Explain the steps involved in training programmes.

Answered: 1 week ago

Question

What are the need and importance of training ?

Answered: 1 week ago