c언어 구조체배열을 이용한 학년별 성적관리 프로그램 질문입니다.

익명 사용자의 이미지

c언어의 구조체 배열을 이용하여 학년별 과목별 성적의 평균을 구하는 프로그램입니다.
학생 구조체를 하나 선언하여 학생의 정보와 과목별 성적을 입력받았고,
점수 구조체를 선언하여 학생들의 과목별 성적의 합과 평균값을 담으려고 했습니다.
디버그로 돌려보니 scanf로 입력받아 s구조체 배열에는 값이 잘 들어갑니다.
근데 그 다음에 다른 구조체의 배열에 넣으려고 하니 값이 주소값으로 들어가는 것 같습니다.
여기서부터 막혀서 아예 뒷부분 결과값까지 다 주소값으로 나오네요ㅠㅠ
포인터로도 바꿔보고 ㄱ했는데 도저히 풀리지 않습니다.. 도와주세요

#include <stdio.h>
#define SIZE 3
#define SIZE2 5
 
struct student {
	char name[10];
	int number;
	int grade;
	int kor;
	int eng;
	int math;
};
 
struct grades
{
	int korSum;
	int engSum;
	int mathSum;
	double korAvg;
	double engAvg;
	double mathAvg;
};
 
void main() {
	struct student s[SIZE][SIZE2];
	struct grades g[SIZE];
	int i, j;
	int arrSum[SIZE];
 
 
	for (i = 0; i < SIZE; i++) {
		printf("[ %d학년 성적 입력 ]\n",i);
		for (j = 0; j < SIZE2; j++) {
			printf("이름 : ");
			scanf("%s", s[i][j].name);
			printf("번호 : ");
			scanf("%d", &s[i][j].number);
			printf("학년 : ");
			scanf("%d", &s[i][j].grade);
			printf("국어 : ");
			scanf("%d", &s[i][j].kor);
			printf("영어 : ");
			scanf("%d", &s[i][j].eng);
			printf("수학 : ");
			scanf("%d", &s[i][j].math);
			printf("--------------------------------------\n");
 
			g[i].korSum += s[i][j].kor;
			g[i].engSum += s[i][j].eng;
			g[i].mathSum += s[i][j].math;
		}
 
		g[i].korAvg = (double)g[i].korSum / SIZE2;
		g[i].engAvg = (double)g[i].engSum / SIZE2;
		g[i].mathAvg = (double)g[i].mathSum / SIZE2;
	}
 
	for (i = 0; i < SIZE; i++) {
		printf("[ %d학년 성적 평균 ]\n", i);
		printf("국어 평균 : %lf\n", g[i].korAvg);
		printf("영어 평균 : %lf\n", g[i].engAvg);
		printf("수학 평균 : %lf\n", g[i].mathAvg);
		printf("------------------------------------------\n");
	}
 
 
}
swish95의 이미지

객체 생성하는 부분이 빠졌네요

------------------------------------------------------------
ProgrammingHolic

익명 사용자의 이미지

변수 초기화가 안되어서 그렇습니다.
항상 변수 선언후 초기화 하는 습관을 갖으셔야 해요~

        for (i = 0; i < SIZE; i++) {
                g[i].korAvg=0;
                g[i].engAvg=0;
                g[i].mathAvg=0;
                g[i].korSum=0;
                g[i].engSum=0;
                g[i].mathSum=0;
                printf("[ %d학년 성적 입력 ]\n",i);

세벌의 이미지

0학년 이라는 건 없죠?
몇학년 성적 입력인지 출력해놓고, 몇학년인지 또 입력하라는 것도 이상하고...
SIZE, SIZE2 이런식으로 이름을 쓰면 나중에는 프로그램 만든 본인 스스로도 헷갈리게 될 겁니다.
grade, grades 역시...
다른 분이 지적하신 변수초기화, 객체생성 이 말씀도 도움이 될 겁니다.

세벌의 이미지

제가 정답은 아닙니다...

#include <stdio.h>
#define GRADES 3
#define MEMBERS 2
 
struct student {
	char name[10];
	int number;
	int grade;
	int kor;
	int eng;
	int math;
};
 
struct sumavg
{
	int korSum;
	int engSum;
	int mathSum;
	double korAvg;
	double engAvg;
	double mathAvg;
};
 
int main() {
	static struct student s[GRADES+1][MEMBERS];
	static struct sumavg g[GRADES+1];
	int i, j;
 
	for (i = 1; i <= GRADES; i++) {
		printf("[ %d학년 성적 입력 ]\n",i);
		for (j = 1; j <= MEMBERS; j++) {
			printf("이름 : ");
			scanf("%s", s[i][j].name);
 
			printf("번호 : ");
			scanf("%d", &s[i][j].number);
 
//			s[i][j].grade=i;
 
			printf("국어 : ");
			scanf("%d", &s[i][j].kor);
 
			printf("영어 : ");
			scanf("%d", &s[i][j].eng);
 
			printf("수학 : ");
			scanf("%d", &s[i][j].math);
 
			printf("--------------------------------------\n");
 
			g[i].korSum += s[i][j].kor;
			g[i].engSum += s[i][j].eng;
			g[i].mathSum += s[i][j].math;
		}
 
		g[i].korAvg = (double)g[i].korSum / MEMBERS;
		g[i].engAvg = (double)g[i].engSum / MEMBERS;
		g[i].mathAvg = (double)g[i].mathSum / MEMBERS;
	}
 
	for (i = 1; i <= GRADES; i++) {
		printf("[ %d학년 성적 평균 ]\n", i);
		printf("국어 평균 : %lf\n", g[i].korAvg);
		printf("영어 평균 : %lf\n", g[i].engAvg);
		printf("수학 평균 : %lf\n", g[i].mathAvg);
		printf("------------------------------------------\n");
	}
}

제 코드에도 문제점이 좀 있습니다. 입력할 때 같은 같은 학생 번호로 다른 점수를 입력했을 때 문제 등.
질문 하신 분이 질문만 던지고 떠나간 건지 어떤지 모르겠네요..

댓글 달기

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 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • 사용할 수 있는 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>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • You can use Textile markup to format text.
  • 사용할 수 있는 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>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <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].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 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>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.