NAVER

질문 씨언어 고수님들 프로그램좀 알려주세요
비공개 조회수 265 작성일2008.11.19

다음과 같이 저장되어 있는

파일 a.txt 을 읽어서

1   변재솔   90  90  90
2   이미옥   80 100  90

출력파일  b.txt
----------------------------------
번호| 이름    | 국어 영어 수학  총점  평균
----------------------------------
1    | 변재솔 | 90  |  90 | 90  | 270 |90
2    | 이미옥 | 80  |100 | 90  | 280 |90

 


이렇게 출력되는 프로그램좀 짜주세요 (주석, 프로그램 동작 설명) 해주세요

내공 겁니다.

프로필 사진

답변자님,

정보를 공유해 주세요.

1 개 답변
1번째 답변
프로필 사진
danc****
영웅
C, C++, 영어작문, 영어 독해, 읽기 분야에서 활동
본인 입력 포함 정보

코드 올려 드립니다..

간단하게 구현해 봤습니다..

그럼 실행해 보시기 바랍니다..^^

 

 

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

 

#define MAX_COUNT 2 // 읽어올 학생 수..

 

typedef struct _st  // 학생 구조체 선언..
{
 int stNum;
 char name[20];
 int kor;
 int eng;
 int math;
}Stu;

 

void main(void)
{
 FILE *rFp, *wFp;
 char buf[256], *p;
 int count=0, sum=0;
 Stu sts[MAX_COUNT];


 rFp = fopen("a.txt", "r");        // 읽을 파일을 연다..
 wFp = fopen("b.txt", "w");    // 쓸 파일을 연다..

 

 if(rFp == NULL || wFp == NULL)
 {
  puts("File open error~!!\n");
  return ;
 }

 printf("-------------------------------------------\n");
 printf("번호| 이름 | 국어  영어  수학  총점  평균 \n");
 printf("-------------------------------------------\n");
 fprintf(wFp, "-------------------------------------------\n");
 fprintf(wFp, "번호| 이름 | 국어  영어  수학  총점  평균 \n");
 fprintf(wFp, "-------------------------------------------\n");


 while(fgets(buf, sizeof(buf), rFp))  // 파일로 부터 1라인 씩 읽어온다..
 {
  if((p = strtok(buf, " ")))   // buf로 부터 띄어쓰기(공백)을 기준으로 한 구역 읽은 후 stNum에 대입
   sts[count].stNum = atoi(p);
  if((p = strtok(NULL, " ")))   // 띄어쓰기(공백)을 기준으로 한 구역 읽은 후 name에 대입
   strcpy(sts[count].name, p);
  if((p = strtok(NULL, " ")))   // 위와 같은 방식으로.. 아래를 모두 대입 시킴..
   sts[count].kor = atoi(p);
  if((p = strtok(NULL, " ")))
   sts[count].eng = atoi(p);
  if((p = strtok(NULL, " ")))
   sts[count].math = atoi(p);

 

  sum = sts[count].kor + sts[count].eng + sts[count].math;  // 점수의 합을 구한다..

 

  printf(" %d  |%s| %3d | %3d | %3d | %3d | %2.2f\n",  sts[count].stNum,  // 화면에 출력..
         sts[count].name,
         sts[count].kor,
         sts[count].eng,
         sts[count].math,
         sum, (float)sum/3);
  fprintf(wFp, " %d  |%s| %3d | %3d | %3d | %3d | %2.2f\n",  sts[count++].stNum, // b.txt 파일에 출력..
         sts[count].name,
         sts[count].kor,
         sts[count].eng,
         sts[count].math,
         sum, (float)sum/3);
 }

 fclose(rFp);
 fclose(wFp);
 
}


 

2008.11.19.

  • 채택

    질문자가 채택한 답변입니다.

  • 출처

    직접서술

도움이 되었다면 UP 눌러주세요!
UP이 많은 답변일수록 사용자들에게 더 많이 노출됩니다.