안녕하세요 리눅스 C프로그래밍 질문좀 부탁드립니다

익명 사용자의 이미지

안녕하세요 과제하고있는 평범한 컴공생인데 도저히 난관이 풀리질않아서 구글링하다가 들러본 여기에 올려봅니다..
내용은 파일 레코드를 정렬 및 출력하는기능인데요.

stdb2 에 학번, 이름 , 점수 순으로 파일에 입력되어있는상태입니다

예) 이름 : Paek8 , 학번 : 1401161 , 점수 : 62
이름 : Lee13 , 학번 : 1401164 , 점수 : 58
이름 : Kim14 , 학번 : 1401165 , 점수 : 47
이름 : Park8 , 학번 : 1401168 , 점수 : 63
이름 : Cho6 , 학번 : 1401171 , 점수 : 44
이름 : You3 , 학번 : 1401174 , 점수 : 57
이름 : Jeong9 , 학번 : 1401177 , 점수 : 64
이름 : Yoon7 , 학번 : 1401180 , 점수 : 65
이름 : Lee14 , 학번 : 1401183 , 점수 : 59

이런식으로요.
총 100개가있구요. 그런데 이걸 전부 출력하는 함수 dblist.c 를 작성하고 실행하는 과정에서 뭔가 이상하게 실행됩니다.

이름 : Paek1 , 학번 : 1401001 , 점수 : 80
이름 :
1401006 Kim1 54
1401009 Park1 6▒>Ʉ , 학번 : 542138738 , 점수 : 1798381622
이름 : Lee1 , 학번 : 1401003 , 점수 : 75
이름 : 6
1401015 Lee2 73
1401016 Jeong1▒>Ʉ , 학번 : 908085861 , 점수 : 1869506353
이름 : 87
1401019 Kang1 72
1401020 Yoo▒>Ʉ , 학번 : 825242160 , 점수 : 542732143
이름 : Kim1 , 학번 : 1401006 , 점수 : 54
이름 : ee3 54
1401026 Kim3 64
1401029 P▒>Ʉ , 학번 : 875573552 , 점수 : 842604624
이름 : ark2 68
1401031 Cho2 53
1401034 ▒>Ʉ , 학번 : 825503793 , 점수 : 808662048
이름 : Park1 , 학번 : 1401009 , 점수 : 68
이름 : Jeong2 57
1401039 Kang2 62
14010▒>Ʉ , 학번 : 909249073 , 점수 : 875573552
이름 : Cho1 , 학번 : 1401011 , 점수 : 63
이름 : 1043 Lee5 78
1401046 Kim5 57
140▒>Ʉ , 학번 : 891303223 , 점수 : 170996784
이름 : 1049 Park3 63
1401051 Cho3 64
14▒>Ʉ , 학번 : 1865621558 , 점수 : 873083188
.
.
.

이렇게 나오다가 어느순간 갑자기 제대로 출력이됩니다.
입력을 잘못한것도 아닌데 왜 이런건지 모르겠습니다
아래는 dblist.c 와 stdb2 를 만드는 dbcreate.c 코드입니다.

#include
#include
#include
#include
#include "student.h"

void dblist(int argc , char *argv[])
{
int fd, id;
struct student rec;

if (( fd = open(argv[1] , O_RDONLY)) == -1 ) {
perror(argv[1]);
exit(2);
}

while(read(fd,(char *)&rec,sizeof(rec))>0) {
if(rec.id == NULL)
lseek(fd,sizeof(rec),SEEK_CUR);
if(rec.id != 0)
printf("이름 : %s , 학번 : %d , 점수 : %d \n " , rec.name , rec.id , rec.score);
}
close(fd);
}

#include
#include
#include
#include
#include "student.h"

/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
int fd;
struct student rec;

if (argc < 2) {
fprintf(stderr, "사용법 : %s file\n", argv[0]);
exit(1);
}

if ((fd = open(argv[1],O_WRONLY |O_CREAT, 0640))==-1) {
perror(argv[1]);
exit(2);
}

printf("%-9s %-8s %-4s", "학번", "이름", "점수");
while (scanf("%d %s %d", &rec.id, rec.name, &rec.score) == 3) {
lseek(fd, (rec.id - START_ID) * sizeof(rec), SEEK_SET);
write(fd, &rec, sizeof(rec) );
}
printf("record size= %d\n", sizeof(rec));

close(fd);
exit(0);
}

그리고 여기서 점수(내림차순) 으로 출력하고 점수가 같으면 학번(올림차순) 으로 정렬하는 코드 dbsort.c 를 만들었는데요, 여기는 버블정렬을 이용해서 짜려고하는데 생각이 잘 안되네요

아래는 dbsort.c입니다

#include
#include
#include
#include
#include "student.h"

int main(int argc, char *argv[])
{
int fd, id;
int buffer[100];
int i, j, tmp;
struct student rec;

if ( argc < 2 ) {
fprintf(stderr , "사용법 : %s file \n",argv[0]);
exit(1);
}
if (( fd = open(argv[1] , O_RDONLY)) == -1 ) {
perror(argv[1]);
exit(2);
}
for ( i = 0 ; i < 100 ; i++ ) {
buffer[i] = (lseek(fd,sizeof(rec),SEEK_CUR));
for ( j = 1 ; j = 100-i ; j++ ) {
tmp = buffer[j -1];
buffer[j-1] = buffer[j];
buffer[tmp] = tmp;
}
}
close(fd);
exit(0);
printf("정렬이 완료되었습니다");
}

dbsort.c는 제가 잘 모르는상태기도 하고 일단 때려박아봐서 코드가 이상한건 압니다만..
제가 생각하는 방식은
buffer[100] 에 각각 레코드의 score(점수) 를 집어넣고
예) buffer[0] = 1번레코드의 점수 , buffer[1] = 2번레코드의 점수 ...
이런식으로 넣어야 버블정렬을 할 수 있잖아요? 그래서 이런식으로 생각을해봤습니다만.. 어떻게 레코드의 score를
불러낼지를 도저히 모르겠습니다.

부족한 학생이라 설명이 부족할 수 있습니다만 솔루션좀 제기해주시면 정말 감사하겠습니다.
좋은하루되세요.

글쓴이의 이미지

글 수정이 안되서 댓글로답니다 ㅠㅠ

dblist.c

#include #include
#include
#include
#include "student.h"

void dblist(int argc, char *argv[])
{
int fd, id;
struct student rec;

if ((fd = open(argv[1], O_RDONLY)) == -1) {
perror(argv[1]);
exit(2);
}

while (read(fd, (char *)&rec, sizeof(rec)) > 0) {
if (rec.id == NULL)
lseek(fd, sizeof(rec), SEEK_CUR);
if (rec.id != 0)
printf("이름 : %s , 학번 : %d , 점수 : %d \n ", rec.name, rec.id, rec.score);
}
close(fd);
}

dbcreate.c

#include
#include
#include
#include
#include "student.h"

/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
int fd;
struct student rec;

if (argc < 2) {
fprintf(stderr, "사용법 : %s file\n", argv[0]);
exit(1);
}

if ((fd = open(argv[1], O_WRONLY | O_CREAT, 0640)) == -1) {
perror(argv[1]);
exit(2);
}

printf("%-9s %-8s %-4s", "학번", "이름", "점수");
while (scanf("%d %s %d", &rec.id, rec.name, &rec.score) == 3) {
lseek(fd, (rec.id - START_ID) * sizeof(rec), SEEK_SET);
write(fd, &rec, sizeof(rec));
}
printf("record size= %d\n", sizeof(rec));

close(fd);
exit(0);
}

dbsort.c

#include
#include
#include
#include
#include "student.h"

int main(int argc, char *argv[])
{
int fd, id;
int buffer[100];
int i, j, tmp;
struct student rec;

if (argc < 2) {
fprintf(stderr, "사용법 : %s file \n", argv[0]);
exit(1);
}
if ((fd = open(argv[1], O_RDONLY)) == -1) {
perror(argv[1]);
exit(2);
}
for (i = 0; i < 100; i++) {
buffer[i] = (lseek(fd, sizeof(rec), SEEK_CUR));
for (j = 1; j = 100 - i; j++) {
tmp = buffer[j - 1];
buffer[j - 1] = buffer[j];
buffer[tmp] = tmp;
}
}
close(fd);
exit(0);
printf("정렬이 완료되었습니다");
}

글쓴이의 이미지

dblist.c

#include #include
#include
#include
#include "student.h"

void dblist(int argc, char *argv[])
{
int fd, id;
struct student rec;

if ((fd = open(argv[1], O_RDONLY)) == -1) {
perror(argv[1]);
exit(2);
}

while (read(fd, (char *)&rec, sizeof(rec)) > 0) {
if (rec.id == NULL)
lseek(fd, sizeof(rec), SEEK_CUR);
if (rec.id != 0)
printf("이름 : %s , 학번 : %d , 점수 : %d \n ", rec.name, rec.id, rec.score);
}
close(fd);
}

dbcreate.c

#include
#include
#include
#include
#include "student.h"

/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
int fd;
struct student rec;

if (argc < 2) {
fprintf(stderr, "사용법 : %s file\n", argv[0]);
exit(1);
}

if ((fd = open(argv[1], O_WRONLY | O_CREAT, 0640)) == -1) {
perror(argv[1]);
exit(2);
}

printf("%-9s %-8s %-4s", "학번", "이름", "점수");
while (scanf("%d %s %d", &rec.id, rec.name, &rec.score) == 3) {
lseek(fd, (rec.id - START_ID) * sizeof(rec), SEEK_SET);
write(fd, &rec, sizeof(rec));
}
printf("record size= %d\n", sizeof(rec));

close(fd);
exit(0);
}

dbsort.c

#include
#include
#include
#include
#include "student.h"

int main(int argc, char *argv[])
{
int fd, id;
int buffer[100];
int i, j, tmp;
struct student rec;

if (argc < 2) {
fprintf(stderr, "사용법 : %s file \n", argv[0]);
exit(1);
}
if ((fd = open(argv[1], O_RDONLY)) == -1) {
perror(argv[1]);
exit(2);
}
for (i = 0; i < 100; i++) {
buffer[i] = (lseek(fd, sizeof(rec), SEEK_CUR));
for (j = 1; j = 100 - i; j++) {
tmp = buffer[j - 1];
buffer[j - 1] = buffer[j];
buffer[tmp] = tmp;
}
}
close(fd);
exit(0);
printf("정렬이 완료되었습니다");
}

shint의 이미지

구조체. 파일로 쓰고. 읽기 예제
https://ide-run.goorm.io

KLDP 에서는.
< code>
< /code> 로 코드를 묶어서 볼 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <memory.h>
#include <string.h>
 
typedef struct df_student
{
	char name[10];
	int id;
	int score;
} student;
 
#define START_ID 1
 
/*
이름 : Paek8 , 학번 : 1401161 , 점수 : 62
이름 : Lee13 , 학번 : 1401164 , 점수 : 58
이름 : Kim14 , 학번 : 1401165 , 점수 : 47
이름 : Park8 , 학번 : 1401168 , 점수 : 63
이름 : Cho6 , 학번 : 1401171 , 점수 : 44
이름 : You3 , 학번 : 1401174 , 점수 : 57
이름 : Jeong9 , 학번 : 1401177 , 점수 : 64
이름 : Yoon7 , 학번 : 1401180 , 점수 : 65
이름 : Lee14 , 학번 : 1401183 , 점수 : 59
*/
 
//scanf() — 데이터 읽기
//https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/scanf.htm
 
//fscanf() — 형식화된 데이터 읽기
//https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/fscanf.htm#fscanf
 
//sscanf() — 데이터 읽기
//https://www.ibm.com/support/knowledgecenter/ko/ssw_ibm_i_73/rtref/sscanf.htm#sscanf
 
void dblist(int argc , char *argv[])
{
	int fd, id;
	student rec;
 
	if (( fd = open(argv[1] , O_RDONLY)) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	char buf[20];
 
	int cnt = 0;
//	while(read(fd,(char *)&rec,sizeof(rec))>0) 
	while(1) 
	{
		if(cnt > 10) break;
		cnt++;
 
		//http://forum.falinux.com/zbxe/index.php?document_srl=466628&mid=C_LIB
		//정상적으로 실행되었다면 읽어들인 바이트 수를, 실패했다면 -1을 반환
//		ssize_t r = read(fd,(char *)&buf[0], (int)sizeof(rec));
		ssize_t r = read(fd, (char *)&rec, sizeof(rec));
		if( r == -1 )
		{
			break;
		}
		if( r == 0 )
		{
			break;
		}
 
//		printf("----%s : %d\n", buf, (int)sizeof(rec));
//		sscanf(buf, "%s,%d,%d", rec.name, &rec.id, &rec.score);
 
//		if(rec.id == 0)
//			lseek(fd,sizeof(rec),SEEK_CUR);
//		if(rec.id != 0)
			printf("이름 : %s , 학번 : %d , 점수 : %d \n" , rec.name , rec.id , rec.score);
	}
	close(fd);
}
 
 
/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
	//----------------------------
	//쓰기
	//----------------------------
	int fd;
	student rec;
 
	if (argc < 2) 
	{
		fprintf(stderr, "사용법 : %s file\n", argv[0]);
		exit(1);
	}
 
	//
	if ((fd = open(argv[1],O_WRONLY |O_CREAT, 0640))==-1) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	student s;
	memset(&s, 0x00, sizeof(s));
 
	strcpy(s.name, "Lee13");  s.id = 1401164; s.score = 58; write(fd, &s, sizeof(s));
	strcpy(s.name, "Kim14");  s.id = 1401165; s.score = 47; write(fd, &s, sizeof(s));
	strcpy(s.name, "Park8");  s.id = 1401168; s.score = 63; write(fd, &s, sizeof(s));
	strcpy(s.name, "Cho6");   s.id = 1401171; s.score = 44; write(fd, &s, sizeof(s));
	strcpy(s.name, "You3");   s.id = 1401174; s.score = 57; write(fd, &s, sizeof(s));
	strcpy(s.name, "Jeong9"); s.id = 1401177; s.score = 64; write(fd, &s, sizeof(s));
	strcpy(s.name, "Yoon7");  s.id = 1401180; s.score = 65; write(fd, &s, sizeof(s));
	strcpy(s.name, "Lee14");  s.id = 1401183; s.score = 59; write(fd, &s, sizeof(s));
 
 
/*
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	while (scanf("%s %d %d", rec.name, &rec.id, &rec.score) == 3)
	{
		lseek(fd, (rec.id - START_ID) * sizeof(rec), SEEK_SET);
		write(fd, &rec, sizeof(rec) );
	}
	printf("record size= %d\n", (int)sizeof(rec));
*/
	close(fd);
 
	//----------------------------
	//읽기
	//----------------------------
	dblist(argc , argv);
 
 
	exit(0);
}

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

shint의 이미지

파일에서 한줄 바꾸기 예제 소스

lseek(fd2, sizeof(rec)*(cnt), SEEK_CUR);에서. SEEK_SET으로 사용하셔야 할겁니다. ㅇ_ㅇ;;

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <memory.h>
#include <string.h>
 
typedef struct df_student
{
	char name[10];
	int id;
	int score;
} student;
 
#define START_ID 1
 
/*
이름 : Paek8 , 학번 : 1401161 , 점수 : 62
이름 : Lee13 , 학번 : 1401164 , 점수 : 58
이름 : Kim14 , 학번 : 1401165 , 점수 : 47
이름 : Park8 , 학번 : 1401168 , 점수 : 63
이름 : Cho6 , 학번 : 1401171 , 점수 : 44
이름 : You3 , 학번 : 1401174 , 점수 : 57
이름 : Jeong9 , 학번 : 1401177 , 점수 : 64
이름 : Yoon7 , 학번 : 1401180 , 점수 : 65
이름 : Lee14 , 학번 : 1401183 , 점수 : 59
*/
 
/*
5 8 3 9 2
5<8
  5<3
3 8 5 9 2
    5<9
	  5<2
3 8 2 9 5
3<8
  3<2
2 8 3 9 5
2<8
  2<3
    2<9
	  2<5
  8<3
2 3 8 9 5
    8<9
	  8<5
2 3 5 9 8
      9<8
2 3 5 8 9
*/
 
void sort()
{
 
}
 
void dblist(int argc , char *argv[])
{
	int fd1, fd2, fd3, id;
	student rec;
 
	//비교용
	if (( fd1 = open(argv[1] , O_RDONLY )) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	//쓰기용
	if (( fd2 = open(argv[1] , O_WRONLY)) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	//값 읽기용
	if (( fd3 = open(argv[1] , O_RDONLY )) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	char buf[20];
 
	student t;
	student f;
	memset(&t, 0x00, sizeof(t));
	int cnt = 0;
	int cnt_pos = 0;
//	while(read(fd,(char *)&rec,sizeof(rec))>0) 
	while(1) 
	{
		if(cnt > 10) break;
 
		//http://forum.falinux.com/zbxe/index.php?document_srl=466628&mid=C_LIB
		//정상적으로 실행되었다면 읽어들인 바이트 수를, 실패했다면 -1을 반환
//		ssize_t r = read(fd,(char *)&buf[0], (int)sizeof(rec));
		ssize_t r = read(fd1, (char *)&rec, sizeof(rec));
		if( r == -1 )
		{
			break;
		}
		if( r == 0 )
		{
			break;
		}
 
//		printf("----%s : %d\n", buf, (int)sizeof(rec));
//		sscanf(buf, "%s,%d,%d", rec.name, &rec.id, &rec.score);
 
//		if(rec.id == 0)
//			lseek(fd,sizeof(rec),SEEK_CUR);
//		if(rec.id != 0)
		printf("[비교] 이름 : %s , 학번 : %d , 점수 : %d \t" , f.name , f.id , f.score);
		printf("[앞] 이름 : %s , 학번 : %d , 점수 : %d \t" , t.name , t.id , t.score);
		printf("[뒤] 이름 : %s , 학번 : %d , 점수 : %d \n" , rec.name , rec.id , rec.score);
 
		if(t.id == 0)
		{
			t = rec;
			continue;
		}
		else
		{
			//다음값이 더 크면.
			if(t.id < rec.id)
			{
				//다음으로 진행
			}
			else
			{
				//교환
				cnt_pos++;
 
				//앞 값 읽어두기
				lseek(fd3, sizeof(rec)*(cnt-1), SEEK_CUR);
				read(fd3, (char *)&f, sizeof(rec));
 
				//앞 값에 저장
				lseek(fd2, sizeof(rec)*(cnt-1), SEEK_CUR);
				write(fd2, &rec, sizeof(rec));
 
				//뒤 값에 저장
				lseek(fd2, sizeof(rec)*(cnt), SEEK_CUR);
				write(fd2, &f, sizeof(rec));
 
				break;
			}
		}
		t = rec;
		cnt++;
	}
	close(fd1);
	close(fd2);
	close(fd3);
}
 
 
void dblist2(int argc , char *argv[])
{
	int fd, id;
	student rec;
 
	if (( fd = open(argv[1] , O_RDONLY)) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	char buf[20];
 
	int cnt = 0;
	while(1) 
	{
		if(cnt > 10) break;
		cnt++;
 
		ssize_t r = read(fd, (char *)&rec, sizeof(rec));
		if( r == -1 )
		{
			break;
		}
		if( r == 0 )
		{
			break;
		}
 
			printf("이름 : %s , 학번 : %d , 점수 : %d \n" , rec.name , rec.id , rec.score);
	}
	close(fd);
}
 
 
/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
	//----------------------------
	//쓰기
	//----------------------------
	int fd;
	student rec;
 
	if (argc < 2) 
	{
		fprintf(stderr, "사용법 : %s file\n", argv[0]);
		exit(1);
	}
 
	//
	if ((fd = open(argv[1],O_WRONLY |O_CREAT, 0640))==-1) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	student s;
	memset(&s, 0x00, sizeof(s));
 
	strcpy(s.name, "Kim14");  s.id = 1401165; s.score = 47; write(fd, &s, sizeof(s));
	strcpy(s.name, "Yoon7");  s.id = 1401180; s.score = 65; write(fd, &s, sizeof(s));
	strcpy(s.name, "Lee13");  s.id = 1401164; s.score = 58; write(fd, &s, sizeof(s));
	strcpy(s.name, "Cho6");   s.id = 1401171; s.score = 44; write(fd, &s, sizeof(s));
	strcpy(s.name, "Jeong9"); s.id = 1401177; s.score = 64; write(fd, &s, sizeof(s));
	strcpy(s.name, "Park8");  s.id = 1401168; s.score = 63; write(fd, &s, sizeof(s));
	strcpy(s.name, "You3");   s.id = 1401174; s.score = 57; write(fd, &s, sizeof(s));
	strcpy(s.name, "Lee14");  s.id = 1401183; s.score = 59; write(fd, &s, sizeof(s));
 
 
/*
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	while (scanf("%s %d %d", rec.name, &rec.id, &rec.score) == 3)
	{
		lseek(fd, (rec.id - START_ID) * sizeof(rec), SEEK_SET);
		write(fd, &rec, sizeof(rec) );
	}
	printf("record size= %d\n", (int)sizeof(rec));
*/
	close(fd);
	printf("\n");
 
	//----------------------------
	//읽기
	//----------------------------
	dblist(argc , argv);
	printf("\n");
 
 
	dblist2(argc , argv);
	printf("\n");
 
 
	exit(0);
}
 
 
학번    이름   점수
[비교] 이름 :  , 학번 : 32764 , 점수 : 4196288  [앞] 이름 :  , 학번 : 0 , 점수 : 0      [뒤] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47
[비교] 이름 :  , 학번 : 32764 , 점수 : 4196288  [앞] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47  [뒤] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65
[비교] 이름 :  , 학번 : 32764 , 점수 : 4196288  [앞] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65  [뒤] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58
 
학번    이름   점수
이름 : Lee13 , 학번 : 1401164 , 점수 : 58
이름 : Yoon7 , 학번 : 1401180 , 점수 : 65
이름 : Kim14 , 학번 : 1401165 , 점수 : 47
이름 : Cho6 , 학번 : 1401171 , 점수 : 44
이름 : Jeong9 , 학번 : 1401177 , 점수 : 64
이름 : Park8 , 학번 : 1401168 , 점수 : 63
이름 : You3 , 학번 : 1401174 , 점수 : 57
이름 : Lee14 , 학번 : 1401183 , 점수 : 59
이름 :  , 학번 : 0 , 점수 : 0
이름 :  , 학번 : 0 , 점수 : 0
이름 :  , 학번 : 0 , 점수 : 1699348480

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

shint의 이미지

정렬된 예제
https://ide-run.goorm.io/

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <memory.h>
#include <string.h>
 
typedef struct df_student
{
	char name[10];
	int id;
	int score;
} student;
 
#define START_ID 1
 
 
#define MAX 8
 
 
/*
이름 : Paek8 , 학번 : 1401161 , 점수 : 62
이름 : Lee13 , 학번 : 1401164 , 점수 : 58
이름 : Kim14 , 학번 : 1401165 , 점수 : 47
이름 : Park8 , 학번 : 1401168 , 점수 : 63
이름 : Cho6 , 학번 : 1401171 , 점수 : 44
이름 : You3 , 학번 : 1401174 , 점수 : 57
이름 : Jeong9 , 학번 : 1401177 , 점수 : 64
이름 : Yoon7 , 학번 : 1401180 , 점수 : 65
이름 : Lee14 , 학번 : 1401183 , 점수 : 59
*/
 
/*
			cnt_pos
0 1 2 3 4	cnt
 
5 8 3 9 2
  5<3
  0<2		start_pos < cnt
3 8 5 9 2
	  5<2
      0<4
3 8 2 9 5 <---- 여기까지 한번이 완료.
  3<2
  0<2
2 8 3 9 5 <---- 여기까지 한번이 완료.
  8<3
  1<2
2 3 8 9 5
	  8<5
	  3<4
2 3 5 9 8 <---- 여기까지 한번이 완료.
      9<8
	  3<4
2 3 5 8 9 <---- 여기까지 한번이 완료.
 
http://codepad.org/Fk1Gy3WQ
 
#include <stdio.h>
 
#define MAX 5
 
int main()
{
    int i;
    int j;
    int k;
    char data[MAX] = {5,8,3,9,2};
    for(k=0; k<MAX; k++)
    {
        printf("%d ", data[k]);
    }
    printf("\n");
 
    char tmp;
    char buf;
    for(i=0; i<MAX; i++)
    {
        tmp = data[i];
    	for(j=i; j<MAX; j++)
    	{            
            if(j > i)
            {
                printf("buf:%d tmp:%d data[i]:%d data[j]:%d \t", buf, tmp, data[i], data[j]);
                if(data[i] > data[j])
                {
                    char t = data[i];
                    data[i] = data[j];
                    data[j] = t;
                    for(k=0; k<; k++)
                    {
                        printf("%d ", data[k]);
                    }
                    printf("\n");
                }
            }
            if(buf < tmp)
            {
            }
            buf = tmp;
    	}
    }    
    return 0;
}
 
5 8 3 9 2 
buf:5 tmp:5 data[i]:5 data[j]:8 	buf:5 tmp:5 data[i]:5 data[j]:3 	3 8 5 9 2 
buf:5 tmp:5 data[i]:3 data[j]:9 	buf:5 tmp:5 data[i]:3 data[j]:2 	2 8 5 9 3 
buf:8 tmp:8 data[i]:8 data[j]:5 	2 5 8 9 3 
buf:8 tmp:8 data[i]:5 data[j]:9 	buf:8 tmp:8 data[i]:5 data[j]:3 	2 3 8 9 5 
buf:8 tmp:8 data[i]:8 data[j]:9 	buf:8 tmp:8 data[i]:8 data[j]:5 	2 3 5 9 8 
buf:9 tmp:9 data[i]:9 data[j]:8 	2 3 5 8 9 
*/
 
 
void dblist2(int argc , char *argv[]);
 
void sort()
{
 
}
 
void dblist(int argc , char *argv[])
{
	int fd1, fd2, fd3, id;
	student rec;
 
	//비교용
	if (( fd1 = open(argv[1] , O_RDWR)) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	//쓰기용
	if (( fd2 = open(argv[1] , O_RDWR)) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	//값 읽기용
	if (( fd3 = open(argv[1] , O_RDWR )) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
 
 
 
 
 
    int i;
    int j;
    int k;
 
	//
	dblist2(argc , argv);
    printf("\n");
 
    char buf;
    for(i=0; i<MAX; i++)
    {
//        tmp = data[i];
 
		//
		ssize_t r = lseek(fd1, sizeof(rec)*(i), SEEK_SET);
		if(r == -1)
		{
			printf("lseek faile\n");
		}		
		r = read(fd1, (char *)&rec, sizeof(rec));
		if( r == -1 )
		{
			printf("읽기 종료\n");
			break;
		}
		student s = rec;
    	for(j=i; j<MAX; j++)
    	{            
            if(j > i)
            {
 
				//여기서 한번 더 읽어 줘야. i 값이 정상적으로 읽어짐.
				r = lseek(fd1, sizeof(rec)*(i), SEEK_SET);
				if(r == -1)
				{
					printf("lseek faile\n");
				}		
				r = read(fd1, (char *)&rec, sizeof(rec));
				if( r == -1 )
				{
					printf("읽기 종료\n");
					break;
				}
				s = rec;
 
				//
				r = lseek(fd1, sizeof(rec)*(j), SEEK_SET);
				if(r == -1)
				{
					printf("lseek faile\n");
				}
				r = read(fd1, (char *)&rec, sizeof(rec));
				if( r == -1 )
				{
					printf("읽기 종료\n");
					break;
				}
				student t = rec;
 
//                printf("buf:%d tmp:%d data[i]:%d data[j]:%d \t", buf, tmp, data[i], data[j]);
 
				printf("[i:%d]s:%s %d  [j:%d]t:%s %d\n", i, s.name, s.id, j, t.name, t.id);
//                if(data[i] > data[j])
				if(s.id > t.id)
                {
                    // char t = data[i];
                    // data[i] = data[j];
                    // data[j] = t;
 
					//앞 값에 저장
					r = lseek(fd1, sizeof(rec)*(i), SEEK_SET);
					if(r == -1)
					{
						printf("lseek faile\n");
					}				
					write(fd1, &t, sizeof(rec));
 
					//뒤 값에 저장
					r = lseek(fd1, sizeof(rec)*(j), SEEK_SET);
					if(r == -1)
					{
						printf("lseek faile\n");
					}
					write(fd1, &s, sizeof(rec));
 
					//
					dblist2(argc , argv);
				    printf("\n");
                }
            }
    	}
    }    
 
 
 
 
 
 
 
 
 
 
/*
//	FILE * fp2 = fdopen(fd2, "wb");
 
	char buf[20];
	student t;
	student f;
	memset(&t, 0x00, sizeof(t));
	int cnt = 0;
	int cnt_pos = 0;
	int start_pos = 0;
//	while(read(fd,(char *)&rec,sizeof(rec))>0) 
	printf("vvvvvvvvvvvv\n");
	while(1) 
	{
//		if(cnt > 8) break;
 
		//http://forum.falinux.com/zbxe/index.php?document_srl=466628&mid=C_LIB
		//정상적으로 실행되었다면 읽어들인 바이트 수를, 실패했다면 -1을 반환
//		ssize_t r = read(fd,(char *)&buf[0], (int)sizeof(rec));
		ssize_t r = read(fd1, (char *)&rec, sizeof(rec));
		if( r == -1 )
		{
			printf("읽기 종료\n");
			break;
		}
		if( cnt >= 8 )
		{
//			break;
			cnt_pos++;
 
			printf("전체 한번 완료 : %d \n", cnt_pos);
			//전체 한번 완료
 
			//처음으로 이동
//			off_t r = lseek(fd1, sizeof(rec)*(cnt_pos), SEEK_SET);
			off_t r = lseek(fd1, 0, SEEK_SET);
			if(r == -1)
			{
				printf("lseek faile\n");
			}
 
 
			//
			if(cnt_pos > 3)
			{
				printf("전체 값 비교를 모두 완료한 경우. 종료\n");
				break;
			}
			cnt = 0;
			continue;
		}
 
		if(cnt == 0)
		{
			f = rec;
//			start_pos = cnt_pos;
			start_pos = 0;
		}
 
		//How can you flush a write using a file descriptor?
		//https://stackoverflow.com/questions/259355/how-can-you-flush-a-write-using-a-file-descriptor
 
		printf("cnt : %d start_pos : %d \t", cnt, start_pos);
		printf("[비교] 이름 : %s , 학번 : %d , 점수 : %d \t" , f.name , f.id , f.score);
		printf("[뒤] 이름 : %s , 학번 : %d , 점수 : %d \n" , rec.name , rec.id , rec.score);
 
		if(cnt == 0)
		{
			cnt++;
			continue;
		}
		else
		{
			//다음값이 더 크면.
			if(f.id < rec.id)
			{
				//다음으로 진행
				lseek(fd1, sizeof(rec)*(cnt+1), SEEK_CUR);
				start_pos = cnt_pos+cnt-1;
				break;
			}
			else
			{
				//교환
				printf("교환 발생\n");
 
 
				// close(fd2);
 
				// //쓰기용
				// if (( fd2 = open(argv[1] , O_RDWR)) == -1 ) 
				// {
				// 	perror(argv[1]);
				// 	exit(2);
				// }
 
 
 
				//앞 값 읽어두기
//				lseek(fd3, sizeof(rec)*(cnt_pos), SEEK_CUR);
//				read(fd3, (char *)&f, sizeof(rec));
 
				printf("[%d] %s %d <- [%d] %s %d\n", start_pos, f.name, f.id, cnt, rec.name, rec.id);
 
//				fsync(fd1);				fdatasync(fd1);
//				fsync(fd2);				fdatasync(fd2);
 
				//앞 값에 저장
				off_t r = lseek(fd2, sizeof(rec)*(start_pos), SEEK_SET);
				if(r == -1)
				{
					printf("lseek faile\n");
				}
//				rec.id = 11111;
 
//				fwrite(&rec, 1, sizeof(rec), fp2);
//				fwrite(&rec, sizeof(rec), 1, fp2);
				write(fd2, &rec, sizeof(rec));
 
//				fsync(fd1);				fdatasync(fd1);
//				fsync(fd2);				fdatasync(fd2);
 
				//뒤 값에 저장
				r = lseek(fd2, sizeof(rec)*(cnt), SEEK_SET);
				if(r == -1)
				{
					printf("lseek faile\n");
				}
//				f.id = 22222;
//				fwrite(&f, 1, sizeof(rec), fp2);
//				fwrite(&f, sizeof(rec), 1, fp2);
				write(fd2, &f, sizeof(rec));
 
 
 
//				fsync(fd1);				fdatasync(fd1);
//				fsync(fd2);				fdatasync(fd2);
 
				dblist2(argc , argv);
				printf("\n");
			}
		}
		cnt++;
	}
*/
	close(fd1);
	close(fd2);
	close(fd3);
//	fclose(fp2);
 
}
 
 
void dblist2(int argc , char *argv[])
{
	int fd, id;
	student rec;
 
	if (( fd = open(argv[1] , O_RDONLY)) == -1 ) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	char buf[20];
 
	int cnt = 0;
	while(1) 
	{
		if(cnt > 8) break;
 
		ssize_t r = read(fd, (char *)&rec, sizeof(rec));
		if( r == -1 )
		{
			break;
		}
		if( r == 0 )
		{
			break;
		}
 
		printf("[%d] 이름 : %s , 학번 : %d , 점수 : %d \n" , cnt, rec.name , rec.id , rec.score);
		cnt++;
	}
	close(fd);
}
 
 
/* 학생 정보를 입력받아 데이터베이스 파일에 저장한다. */
int main(int argc, char *argv[])
{
 
	//----------------------------
	//화면 초기화
	//----------------------------
	system("clear");
 
 
	//----------------------------
	//기존 파일 삭제
	//----------------------------
	system("rm student.txt");
 
	//----------------------------
	//쓰기
	//----------------------------
	int fd;
	student rec;
 
	if (argc < 2) 
	{
		fprintf(stderr, "사용법 : %s file\n", argv[0]);
		exit(1);
	}
 
	//
	if ((fd = open(argv[1], O_RDWR |O_CREAT, 0640))==-1) 
	{
		perror(argv[1]);
		exit(2);
	}
 
	student s;
	memset(&s, 0x00, sizeof(s));
 
	strcpy(s.name, "Kim14");  s.id = 1401165; s.score = 47; write(fd, &s, sizeof(s));
	strcpy(s.name, "Yoon7");  s.id = 1401180; s.score = 65; write(fd, &s, sizeof(s));
	strcpy(s.name, "Lee13");  s.id = 1401164; s.score = 58; write(fd, &s, sizeof(s));
	strcpy(s.name, "Cho6");   s.id = 1401171; s.score = 44; write(fd, &s, sizeof(s));
	strcpy(s.name, "Jeong9"); s.id = 1401177; s.score = 64; write(fd, &s, sizeof(s));
	strcpy(s.name, "Park8");  s.id = 1401168; s.score = 63; write(fd, &s, sizeof(s));
	strcpy(s.name, "You3");   s.id = 1401174; s.score = 57; write(fd, &s, sizeof(s));
	strcpy(s.name, "Lee14");  s.id = 1401183; s.score = 59; write(fd, &s, sizeof(s));
 
 
/*
	printf("%-9s %-8s %-4s\n", "학번", "이름", "점수");
 
	while (scanf("%s %d %d", rec.name, &rec.id, &rec.score) == 3)
	{
		lseek(fd, (rec.id - START_ID) * sizeof(rec), SEEK_SET);
		write(fd, &rec, sizeof(rec) );
	}
	printf("record size= %d\n", (int)sizeof(rec));
*/
	close(fd);
	printf("\n");
 
	//----------------------------
	//읽기
	//----------------------------
	dblist2(argc , argv);
	printf("\n");
 
	dblist(argc , argv);
	printf("\n");
 
	dblist2(argc , argv);
	printf("\n");
 
 
 
	exit(0);
}
 
//
 
학번    이름   점수
[0] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[1] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[2] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
학번    이름   점수
학번    이름   점수
[0] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[1] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[2] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:0]s:Kim14 1401165  [j:1]t:Yoon7 1401180
[i:0]s:Kim14 1401165  [j:2]t:Lee13 1401164
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[2] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:0]s:Lee13 1401164  [j:3]t:Cho6 1401171
[i:0]s:Lee13 1401164  [j:4]t:Jeong9 1401177
[i:0]s:Lee13 1401164  [j:5]t:Park8 1401168
[i:0]s:Lee13 1401164  [j:6]t:You3 1401174
[i:0]s:Lee13 1401164  [j:7]t:Lee14 1401183
[i:1]s:Yoon7 1401180  [j:2]t:Kim14 1401165
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:1]s:Kim14 1401165  [j:3]t:Cho6 1401171
[i:1]s:Kim14 1401165  [j:4]t:Jeong9 1401177
[i:1]s:Kim14 1401165  [j:5]t:Park8 1401168
[i:1]s:Kim14 1401165  [j:6]t:You3 1401174
[i:1]s:Kim14 1401165  [j:7]t:Lee14 1401183
[i:2]s:Yoon7 1401180  [j:3]t:Cho6 1401171
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[3] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:2]s:Cho6 1401171  [j:4]t:Jeong9 1401177
[i:2]s:Cho6 1401171  [j:5]t:Park8 1401168
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:2]s:Park8 1401168  [j:6]t:You3 1401174
[i:2]s:Park8 1401168  [j:7]t:Lee14 1401183
[i:3]s:Yoon7 1401180  [j:4]t:Jeong9 1401177
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[4] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[5] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:3]s:Jeong9 1401177  [j:5]t:Cho6 1401171
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[5] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:3]s:Cho6 1401171  [j:6]t:You3 1401174
[i:3]s:Cho6 1401171  [j:7]t:Lee14 1401183
[i:4]s:Yoon7 1401180  [j:5]t:Jeong9 1401177
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[5] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[6] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:4]s:Jeong9 1401177  [j:6]t:You3 1401174
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[5] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[6] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:4]s:You3 1401174  [j:7]t:Lee14 1401183
[i:5]s:Yoon7 1401180  [j:6]t:Jeong9 1401177
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[5] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[6] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 
 
[i:5]s:Jeong9 1401177  [j:7]t:Lee14 1401183
[i:6]s:Yoon7 1401180  [j:7]t:Lee14 1401183
 
학번    이름   점수
[0] 이름 : Lee13 , 학번 : 1401164 , 점수 : 58 
[1] 이름 : Kim14 , 학번 : 1401165 , 점수 : 47 
[2] 이름 : Park8 , 학번 : 1401168 , 점수 : 63 
[3] 이름 : Cho6 , 학번 : 1401171 , 점수 : 44 
[4] 이름 : You3 , 학번 : 1401174 , 점수 : 57 
[5] 이름 : Jeong9 , 학번 : 1401177 , 점수 : 64 
[6] 이름 : Yoon7 , 학번 : 1401180 , 점수 : 65 
[7] 이름 : Lee14 , 학번 : 1401183 , 점수 : 59 

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

글쓴이의 이미지

정말 감사합니다 너무 도움이됐어요 ㅠㅠㅠㅠ 복받으실겁니다

shint의 이미지

...

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.