[ create a new paste ] login | about

Link: http://codepad.org/DnUikRHF    [ raw code | output | fork ]

C, pasted on Nov 19:
/* quiz7-1.c */

#include <stdio.h>
#include <stdlib.h>


/* filename of test-result. */
const char* g_filename = "quiz7-1.txt";
/* const char* g_filename = NULL; */

struct TestResult {
	int length;
	char kamoku1[6];
	char kamoku2[6];
	char kamoku3[6];
	char kamoku4[6];
	int tensu[100][5];
};

int die( const char* msg );
int check_eof(FILE* fp,int val);
int skip_if_zero(FILE* fp,int val);
int read_test_result(const char* filename,struct TestResult* out);
int print_test_result(struct TestResult* result);
int print_average_student(struct TestResult* result);
int print_average_subject(struct TestResult* result);

int main( int argc, char** argv){
	struct TestResult result = {0};
	const char* filename;

	if( g_filename != NULL ){
		filename = g_filename;
	}
	else if( argc > 1 ){
		filename = argv[1];
	}
	else {
		die("error: filename required.");
	}

	read_test_result( filename, &result );

	puts("tensu ::::");
	print_test_result(&result);

	puts("\nStudent Average::::");
	print_average_student(&result);

	puts("\nSubject Average::::");

	print_average_subject(&result);

	return 0;
}

int read_test_result(const char* filename, struct TestResult* out){
	int i;
	FILE* fp;
	int* pLine;
	int retVal = 0;

	if( ( fp = fopen(filename,"r") ) == NULL ){
		die("error: cannot open file.");
	}

	while( retVal != 1 ){
		retVal = fscanf(fp,"%d",&(out->length));
		check_eof(fp,retVal);
		skip_if_zero(fp,retVal);
	}

	if( out->length < 1 || out->length > 100 ){
		fclose(fp);
		die("error: invalid number of records.");
	}

	retVal = 0;
	while( retVal != 4 ){
		retVal = fscanf(fp,"%5s%5s%5s%5s",
			out->kamoku1,
			out->kamoku2,
			out->kamoku3,
			out->kamoku4
		);
		check_eof(fp,retVal);
		skip_if_zero(fp,retVal);
	}

	for( i = 0; i < out->length; i++ ){
		pLine = out->tensu[i];
		retVal = 0;
		while( retVal != 5 ){
			retVal = fscanf(fp,"%d%d%d%d%d",
				&(pLine[0]),
				&(pLine[1]),
				&(pLine[2]),
				&(pLine[3]),
				&(pLine[4])
			);
			check_eof(fp,retVal);
			skip_if_zero(fp,retVal);
		}
	}

	fclose(fp);

	return 0;
}

/* redundant */
int print_test_result(struct TestResult* result){
	int i;
	int length;
	length = result->length;

	for( i = 0; i < length; i++ ){
		printf("%d %d %d %d %d\n",
			result->tensu[i][0],
			result->tensu[i][1],
			result->tensu[i][2],
			result->tensu[i][3],
			result->tensu[i][4] );
	}
}


/* redundant */
int print_average_student(struct TestResult* result){
	int i;
	int j;
	int length;
	double sumStudent;

	length = result->length;

	for( i = 0; i < length; i++ ){
		sumStudent = 0;
		for( j = 1; j < 5; j++ ){
			sumStudent += result->tensu[i][j];
		}
		printf("%d : %2.2f\n",
			result->tensu[i][0],
			(sumStudent/4) );
	}

	return 0;
}

/* redundant */
int print_average_subject(struct TestResult* result){
	int i;
	int j;
	int length;
	
	/* intmax >> 100*100 */
	double sumSubject[4] = {0,0,0,0};

	length = result->length;

	for( i = 0; i < length; i++ ){
		for( j = 0; j < 4; j++ ){
			sumSubject[j] += result->tensu[i][j+1];
		}
	}

	if( length != 0 ){
		printf("%s : %2.1f\n", result->kamoku1, (sumSubject[0]/length));
		printf("%s : %2.1f\n", result->kamoku2, (sumSubject[1]/length));
		printf("%s : %2.1f\n", result->kamoku3, (sumSubject[2]/length));
		printf("%s : %2.1f\n", result->kamoku4, (sumSubject[3]/length));
	}

	return 0;
}

int check_eof(FILE* fp,int val){
	if( val == EOF ){
		fclose(fp);
		die("error: unexpected EOF.");
	}
	return 0;
}

int skip_if_zero(FILE* fp, int val){
	if( val == 0 ){
		fgetc(fp);
	}
	return 0;
}

int die( const char* msg ){
	puts(msg);
	exit(-1);
	return 0;
}


/* quiz 7-1.txt
5
Mat Phys Chem Eng
8001 78 64 88 90
8004 34 40 52 67
8013 83 77 89 93
8025 98 81 69 77
8062 56 63 47 23
*/

/* $ ./a.out
tensu ::::
8001 78 64 88 90
8004 34 40 52 67
8013 83 77 89 93
8025 98 81 69 77
8062 56 63 47 23

Student Average::::
8001 : 80.00
8004 : 48.25
8013 : 85.50
8025 : 81.25
8062 : 47.25

Subject Average::::
Mat : 69.8
Phys : 65.0
Chem : 69.0
Eng : 70.0
*/


Output:
1
2
3
error: cannot open file.

Exited: ExitFailure 255


Create a new paste based on this one


Comments: