현재 버전

c# c++

C언어 도와주세요


Q) 첨부한 binary 파일 s.bin은 다음 구조체의 학생 정보 1000명분을 담고 있다. 

struct AAA

{ char name[12];

long kor; // 국어 점수

long math; // 수학 점수

};

국어, 수학의 점수의 합이 제일 큰 학생의 이름을 화면에 출력하라. (답: jamqnevcjn)



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <ctype.h>

struct STUDENT
{
	char name[12];
        long kor;			// 국어 점수
	long math;		// 수학 점수
};

struct STUDENT2
{
	char name[12];
	long score;		// 총 점수
};

void sort(struct STUDENT2* data, int n) //구조체를 이용한 소트방법
{
	int i, j;
	struct STUDENT2 tmp;
	for (i = 0; i < n; i++)
	{
		long max = (data + i)->score;//  data[i].score
		int im = i;
		for (j = i; j < n; j++)
		{
			if (max < (data + j)->score)
			{
				max = (data + j)->score; im = j;
			}
		}
		tmp = *(data + i); // tmp = data[i]
		*(data + i) = *(data + im); //data[i] = data[im]
		*(data + im) = tmp; // data[im] = tmp
	}
}

int main()
{
	FILE* f;
	struct STUDENT* s;
	struct STUDENT2* s2;
	int i, n, siz;
	f = fopen("C:\\Users\\sch71\\Desktop\\경희대 3-1\\\\s.bin", "rb");

	if (f == NULL)
	{
		printf("file open error!");
		return 0;
	}

	fseek(f, 0, SEEK_END);
	siz = ftell(f);
	rewind(f);

	s = (struct STUDENT*)malloc(siz);
	if (s == NULL)
	{
		printf("malloc error"); // 동적할당 메모리 
		return 1;
	}
	
        int num = siz / sizeof(struct STUDENT);
	fread(s, sizeof(struct STUDENT), num, f);

	fclose(f);

	s2 = (struct STUDENT2*)malloc(siz);
	if (s2 == NULL)
	{
		printf("malloc error");
		return 1;
	}

	for (i = 0; i < 1000; i++)
	{
		strcpy((s2 + i)->name, (s + i)->name);
		(s2 + i)->score = (s + i)->kor + (s + i)->math ;
	}
	sort(s2, 1000);

	printf("%s", (s2 + 1)->name);

        free(s);
	free(s2);
}



간략하게 코드 설명 드리자면 문제에 나온 구조체와 국어와 수학을 합친 총 점수를 가진 구조체 두 개를 선언 하고 구조체 sort함수도 만들었습니다. 동적메모리 할당 한 후에 구조체 STUDENT 에서 STUDENT2 로 국어+수학 점수와 name을 각각 옮긴 후에 sort함수를 이용해서 구현하려고 하였습니다.  근데 계속  void sort 함수 내에 for 문 안에 있는 if문(34번째 줄)에서 "예외가 throw됨: 쓰기 액세스 위반입니다. max이(가) 0x2F1C7E였습니다." 라고 뜹니다 ㅠㅠ 진짜 6시간정도 붙잡고 있었는데 돌아버릴거같아서 질문남깁니다.. 도와주시면 정말 감사드리겠습니다

수정 이력

2021-06-11 02:01:44 에 아래 내용에서 변경 됨 #3

Q) 첨부한 binary 파일 s.bin은 다음 구조체의 학생 정보 1000명분을 담고 있다. 

struct AAA

{ char name[12];

long kor; // 국어 점수

long math; // 수학 점수

};

국어, 수학의 점수의 합이 제일 큰 학생의 이름을 화면에 출력하라. (답: jamqnevcjn)



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <ctype.h>

struct STUDENT
{
	char name[12];
        long kor;			// 국어 점수
	long math;		// 수학 점수
};

struct STUDENT2
{
	char name[12];
	long score;		// 총 점수
};

void sort(struct STUDENT2* data, int n) //구조체를 이용한 소트방법
{
	int i, j;
	struct STUDENT2 tmp;
	for (i = 0; i < n; i++)
	{
		long max = (data + i)->score;//  data[i].score
		int im = i;
		for (j = i; j < n; j++)
		{
			if (max < (data + j)->score)
			{
				max = (data + j)->score; im = j;
			}
		}
		tmp = *(data + i); // tmp = data[i]
		*(data + i) = *(data + im); //data[i] = data[im]
		*(data + im) = tmp; // data[im] = tmp
	}
}

int main()
{
	FILE* f;
	struct STUDENT* s;
	struct STUDENT2* s2;
	int i, n, siz;
	f = fopen("C:\\Users\\sch71\\Desktop\\경희대 3-1\\\\s.bin", "rb");

	if (f == NULL)
	{
		printf("file open error!");
		return 0;
	}

	fseek(f, 0, SEEK_END);
	siz = ftell(f);
	rewind(f);

	s = (struct STUDENT*)malloc(siz);
	if (s == NULL)
	{
		printf("malloc error"); // 동적할당 메모리 
		return 1;
	}
	
        int num = siz / sizeof(struct STUDENT);
	fread(s, sizeof(struct STUDENT), num, f);

	fclose(f);

	s2 = (struct STUDENT2*)malloc(siz);
	if (s2 == NULL)
	{
		printf("malloc error");
		return 1;
	}

	for (i = 0; i < 1000; i++)
	{
		strcpy((s2 + i)->name, (s + i)->name);
		(s2 + i)->score = (s + i)->kor + (s + i)->math ;
	}
	sort(s2, 1000);

	printf("%s", (s2 + 1)->name);

        free(s);
	free(s2);
}



간략하게 코드 설명 드리자면 문제에 나온 구조체와 국어와 수학을 합친 총 점수를 가진 구조체 두 개를 선언 하고 구조체 sort함수도 만들었습니다. 동적메모리 할당 한 후에 구조체 STUDENT 에서 STUDENT2 로 국어+수학 점수와 name을 각각 옮긴 후에 sort함수를 이용해서 구현하려고 하였습니다.  근데 계속  void sort 함수 내에 for 문 안에 있는 if문에서 "예외가 throw됨: 쓰기 액세스 위반입니다. max이(가) 0x2F1C7E였습니다." 라고 뜹니다 ㅠㅠ 진짜 6시간정도 붙잡고 있었는데 돌아버릴거같아서 질문남깁니다.. 도와주시면 정말 감사드리겠습니다
2021-06-11 02:01:06 에 아래 내용에서 변경 됨 #2

Q) 첨부한 binary 파일 s.bin은 다음 구조체의 학생 정보 1000명분을 담고 있다. 

struct AAA

{ char name[12];

long kor; // 국어 점수

long math; // 수학 점수

};

국어, 수학의 점수의 합이 제일 큰 학생의 이름을 화면에 출력하라. (답: jamqnevcjn)



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <ctype.h>

struct STUDENT
{
	char name[12];
        long kor;			// 국어 점수
	long math;		// 수학 점수
};

struct STUDENT2
{
	char name[12];
	long score;		// 총 점수
};

void sort(struct STUDENT2* data, int n) //구조체를 이용한 소트방법
{
	int i, j;
	struct STUDENT2 tmp;
	for (i = 0; i < n; i++)
	{
		long max = (data + i)->score;//  data[i].score
		int im = i;
		for (j = i; j < n; j++)
		{
			if (max < (data + j)->score)
			{
				max = (data + j)->score; im = j;
			}
		}
		tmp = *(data + i); // tmp = data[i]
		*(data + i) = *(data + im); //data[i] = data[im]
		*(data + im) = tmp; // data[im] = tmp
	}
}

int main()
{
	FILE* f;
	struct STUDENT* s;
	struct STUDENT2* s2;
	int i, n, siz;
	f = fopen("C:\\Users\\sch71\\Desktop\\경희대 3-1\\\\s.bin", "rb");

	if (f == NULL)
	{
		printf("file open error!");
		return 0;
	}

	fseek(f, 0, SEEK_END);
	siz = ftell(f);
	rewind(f);

	s = (struct STUDENT*)malloc(siz);
	if (s == NULL)
	{
		printf("malloc error"); // 동적할당 메모리 
		return 1;
	}
	
        int num = siz / sizeof(struct STUDENT);
	fread(s, sizeof(struct STUDENT), num, f);

	fclose(f);

	s2 = (struct STUDENT2*)malloc(siz);
	if (s2 == NULL)
	{
		printf("malloc error");
		return 1;
	}

	for (i = 0; i < 1000; i++)
	{
		strcpy((s2 + i)->name, (s + i)->name);
		(s2 + i)->score = (s + i)->kor + (s + i)->math ;
	}
	sort(s2, 1000);

	printf("%s", (s2 + 1)->name);

        free(s);
	free(s2);
}



간략하게 코드 설명 드리자면 문제에 나온 구조체와 국어와 수학을 합친 총 점수를 가진 구조체 두 개를 선언 하고 구조체 sort함수도 만들었습니다. 동적메모리 할당 한 후에 구조체 STUDENT 에서 STUDENT2 로 국어+수학 점수와 name을 각각 옮긴 후에 sort함수를 이용해서 구현하려고 하였습니다. 근데 계속  void sort 함수 내에 for 문 안에 있는 if문에서 "예외가 throw됨: 쓰기 액세스 위반입니다. max이(가) 0x2F1C7E였습니다." 라고 뜹니다 ㅠㅠ 진짜 6시간정도 붙잡고 있었는데 돌아버릴거같아서 질문남깁니다.. 도와주시면 정말 감사드리겠습니다
2021-06-11 02:00:39 에 아래 내용에서 변경 됨 #1

Q) 첨부한 binary 파일 s.bin은 다음 구조체의 학생 정보 1000명분을 담고 있다. 

struct AAA

{ char name[12];

long kor; // 국어 점수

long math; // 수학 점수

};

국어, 수학의 점수의 합이 제일 큰 학생의 이름을 화면에 출력하라. (답: jamqnevcjn)



#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#include <ctype.h>

struct STUDENT
{
	char name[12];
        long kor;			// 국어 점수
	long math;		// 수학 점수
};

struct STUDENT2
{
	char name[12];
	long score;		// 총 점수
};

void sort(struct STUDENT2* data, int n) //구조체를 이용한 소트방법
{
	int i, j;
	struct STUDENT2 tmp;
	for (i = 0; i < n; i++)
	{
		long max = (data + i)->score;//  data[i].score
		int im = i;
		for (j = i; j < n; j++)
		{
			if (max < (data + j)->score)
			{
				max = (data + j)->score; im = j;
			}
		}
		tmp = *(data + i); // tmp = data[i]
		*(data + i) = *(data + im); //data[i] = data[im]
		*(data + im) = tmp; // data[im] = tmp
	}
}

int main()
{
	FILE* f;
	struct STUDENT* s;
	struct STUDENT2* s2;
	int i, n, siz;
	f = fopen("C:\\Users\\sch71\\Desktop\\경희대 3-1\\\\s.bin", "rb");

	if (f == NULL)
	{
		printf("file open error!");
		return 0;
	}

	fseek(f, 0, SEEK_END);
	siz = ftell(f);
	rewind(f);

	s = (struct STUDENT*)malloc(siz);
	if (s == NULL)
	{
		printf("malloc error"); // 동적할당 메모리 
		return 1;
	}
	
        int num = siz / sizeof(struct STUDENT);
	fread(s, sizeof(struct STUDENT), num, f);

	fclose(f);

	s2 = (struct STUDENT2*)malloc(siz);
	if (s2 == NULL)
	{
		printf("malloc error");
		return 1;
	}

	for (i = 0; i < 1000; i++)
	{
		strcpy((s2 + i)->name, (s + i)->name);
		(s2 + i)->score = (s + i)->kor + (s + i)->math ;
	}
	sort(s2, 1000);

	printf("%s", (s2 + 1)->name);

        free(s);
	free(s2);
}



이렇게 코딩을 짰는데 자꾸 void sort 함수 내에 for 문 안에 있는 if문에서 "예외가 throw됨: 쓰기 액세스 위반입니다. max이(가) 0x2F1C7E였습니다." 라고 뜹니다 ㅠㅠ 진짜 6시간정도 붙잡고 있었는데 돌아버릴거같아서 질문남깁니다.. 도와주시면 정말 감사드리겠습니다