단일 원형 연결리스트 공부하다가 짠 소스입니다. 조언부탁드려요!

musalhk의 이미지

#include <stdio.h>
#include <malloc.h>
#include <string.h>
 
#define NAME_SIZE 30
 
struct list_node { // 학생 성적 함수
	char name[NAME_SIZE];
	float a;
	float b;
	float c;
	float d;
	float e;
	float f;
	float g;
	float avg;
	struct list_node *link;
};
typedef struct list_node list;
 
int key = 0; // 메뉴 입력 변수
list *head = NULL, *tail = NULL; // 첫번째 노드( head ), 원형 노드( tail )
 
void init() { // 초기 메뉴 함수
	fputs( "------------=------------\n", stdout );
	fputs( "학생 평점 관리 프로그램\n", stdout );
	fputs( "-------------------------\n", stdout );
	fputs( "1. 학생 추가\n2. 학생 삭제\n3. 학생별 성적 출력\n4. 종료\n", stdout );
	scanf( "%d", &key );
	fputs( "\n", stdout );
}
 
void add() { // 학생 노드 생성 함수
	list *ptr = NULL;
	ptr = ( list * )malloc( sizeof( list ) );
	fputs( "추가할 학생 이름, 과목 학점( 7과목 ) 입력\n:", stdout );
	scanf( "%s", ptr->name );
	scanf( "%f", &ptr->a );
	scanf( "%f", &ptr->b );
	scanf( "%f", &ptr->c );
	scanf( "%f", &ptr->d );
	scanf( "%f", &ptr->e );
	scanf( "%f", &ptr->f );
	scanf( "%f", &ptr->g );
	ptr->link = NULL;
 
	if( head == NULL ) {
		head = ptr;
		tail = head;
	}
 
	else {
		ptr->link = head->link;
		head->link = ptr;
		tail = head;
 
	}
}
 
void del(list *ptr) { // 학생 노드 삭제 함수
	list *temp = NULL;
	if( head->link == NULL ) {
		head = NULL;
		free(head);
	}
 
	else {
		temp = ptr->link;
		head->link = temp;
		free(ptr);
	}
}	
 
void listprint() { // 학생 성적 출력 함수
	if( head == NULL ) {
		fputs( "학생 정보가 없습니다.\n", stdout );
		exit(1);
	}
 
	while( head != NULL ) {
		printf( "\n이 름 : %s\n", head->name );
		printf( "과목1 : %1.1f\n", head->a );
		printf( "과목2 : %1.1f\n", head->b );
		printf( "과목3 : %1.1f\n", head->c );
		printf( "과목4 : %1.1f\n", head->d );
		printf( "과목5 : %1.1f\n", head->e );
		printf( "과목6 : %1.1f\n", head->f );
		printf( "과목7 : %1.1f\n", head->g );
		printf( "평 점 : %1.3f\n", ( head->a + head->b + head->c + head->d + head->e + head->f + head->g ) / 7 );
 
		if( head->link == NULL ) {
			break;
		}
 
		else {
			head = head->link;
		}
 
	}
	head = tail;
 
}
 
int main() {
	while( key != 4 ) {
	init();
		if( key == 1 ) {
			add();
		}
		if( key == 3 ) {
			listprint();
		}
		if( key == 2 ) {
			del(head->link);
		}
	}
	return 0;
}

단일 원형 연결리스트로 학점 계산하는 프로그램입니다..
공부할려고 한건데 제대로 짠건지 모르겠습니다..

조언 부탁드립니다!!

musalhk의 이미지

펴엄 구하는 줄이 길어서 짤렸네요;;; 그냥 다 더해서 / 7 해서 출력한거임.ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.