입출력함수

 - stdio.h 를 반드시 include 한다.

 - 표준입출력 6개, 파일 입출력 6개

(stdio.h의 위치는 MinGW에는 C:\MinGW\include 에 있고, 

우분투에서는 whereis stdio.h 의 명령어로 stdio: /usr/include/stdio.h /usr/share/man/man3/stdio.3.gz 에 있음을 볼 수 있다.

그냥 보기위해서 view /usr/include/stdio.h 로 내용을 볼 수있다. 명령모드에서 /printf 로 printf의 내용을 볼 수있다(ctrl+f의 기능))


1. 표준입출력

 1) C-언어가 하는 표준 입출력

     입력버퍼 --> 메모리 --> 출력버퍼

 2) 표준입력 : 키보드로부터 입력버퍼까지 읽어들이는 것

 3) 표준출력 : 출력버퍼로부터 스크린까지 출력하는 것

 4) 목적 : 하드웨어 독립적인 코딩

 5) putchar, puts, printf, getchar, gets, scanf


2. 파일입출력

 1) C-언어가 하는 표준 입출력

     입력버퍼 --> 메모리 --> 출력버퍼

 2) 파일입력 : 파일로부터 입력버퍼까지

 3) 파일출력 : 출력버퍼에서 파일까지

 4) 목적 : 하드웨어 독립적인 코딩

 5) fputc, fputs , fprintf, fgetc , fgets, fscanf


3. 표준출력함수

 1) 프로그램 내부 : Memory

 2) 프로그램 외부 : display, screen, monitor, console

 3) putchar()

   - 화면에 한 개의 글자를 출력하는 함수

   - lineskip 하지 않음. (출력하고 줄을 바꾸지 않는다고)

   - Syntax

     putchar('문자');

     괄호속에는 문자리터럴, 문자변수, 정수리터럴, 정수변수, 수식

 4) puts()

   - 화면에 문자열을 출력하는 함수

   - 메모리상의 시작번지로부터 NULL을 만날때까지 출력

   - lineskip 수행함 (자동으로 줄을 바꿔줌)

   - Syntax

     puts("문자열");

  5) printf()

    - 화면에 문자, 문자열, 수치값들을 서식에 맞게 출력하는 함수.

    - lineskip 수행 안함.

    - 출력서식 : %c, %d, %e, %o, %u, %x, %f, %s

    - Syntax

      printf("문자열");

    - printf("출력서식1, 출력서식2, 출력서식3,...", 출력대상1, 출력대상2, 출력대상3,....)

======================================================

(3)

  putchar('A');

  putchar('A' + 1);

  putchar(67);

  putchar('\n');

  putchar(100);

  char ch = 'M';

  putchar(ch);

  putchar('\b');

  putchar('Z');

  putchar('\t');

  int su = 122;

  putchar(su);

출력:

ABC

dZ      zmino@Ubuntu-22:~/CRoom/0226$ 

(줄바꾸고 dM을 찍고, M을 지워주고 Z를 찍고 탭한후 z를 찍는다.라인 스킵안함.)

---------------------------------------------------------------------------

(4)

  putchar('h'); putchar('e');   putchar('l');   putchar('l');   putchar('o');

  putchar('\n');

  puts("hello");

  puts("world");

  puts("notebook");

  puts("pencil");

  char * address = "경기도 성남시 모란동 110번지";

  puts(address);

  char irum[] = "Michael Jackson";

  puts(irum);

  puts("Hello,Wrold");

  puts("Hello,World" + 2);

  puts("Hello,World" + 6);

출력:

hello

hello

world

notebook

pencil

경기도 성남시 모란동 110번지

Michael Jackson

Hello,Wrold

llo,World

World

-----------------------------------------------------------------------------

(5)

  printf("Hello");

  printf("World");

  printf("\n");

  printf("여기서 중요한 점은 \"A\" 이다.");  //"를 출력하기 위해 \를 붙여준다.

  int kor = 90;

  printf("kor = %d\n", kor);

  printf("kor = %10d\n", kor);    //오른쪽 정렬 10자리 확보 후 출력

  printf("kor = %010d\n", kor);  //오른쪽 정렬로 빈공간에는 0으로 채우고.

  printf("kor = %-10d\n", kor);  //왼쪽 정렬

출력:

HelloWorld

여기서 중요한 점은 "A" 이다.kor = 90

kor =         90

kor = 0000000090

kor = 90

---------------------------------------------------------------------

(5)

  int kor = 90, eng = 100, mat = 56;

  printf("kor = %d, eng = %d, mat = %d\n", kor, eng, mat);

  printf("%5d%5d%5d\n", kor, eng, mat);

  printf("%d, %d, %d\n", kor, eng, mat);

출력:

kor = 90, eng = 100, mat = 56

   90  100   56

90, 100, 56

----------------------------------------------------------------------------

(5)

  char munja = 'A';

  printf("%c\n", munja);

  printf("munja = %c\n", munja);

  printf("munja = %5c\n", munja);

  printf("munja = %-5c\n", munja);

  char ch, ch1, ch2;

  ch = 'B'; ch1 = 'C'; ch2 = 'D';

  printf("%5c%5c%5c\n", ch, ch1, ch2);

  char * irum = "조성모";

  printf("아 ! 당신의 이름은 %s 이군요\n", irum);

출력:

A

munja = A

munja =     A

munja = A

    B    C    D

아 ! 당신의 이름은 조성모 이군요

---------------------------------------------------------------------------------------

(5)

  double avg = 89.56789;

  printf("avg = %f\n", avg);   

  printf("avg = %.2f\n", avg); //소수점 3째자리에서 반올림해서 2자리까지만

  printf("avg = %10.3f\n", avg); //전체 10자리에서 소수점 3자리가지만

  printf("avg = %1.4f\n", avg);      //전체 1자리지만, 정수부는 다 출력하고,  소수점 4째자리까지 출력.

출력:

avg = 89.567890

avg = 89.57

avg =     89.568

avg = 89.5679

------------------------------------------------------------------------------------

(5)

  char * irum = "설운도";

  int kor = 90;

  double avg = 89.56789;

  char grade = 'B';

  printf("%10s%5d%10.3f%5c\n", irum, kor, avg, grade);


출력 :

 설운도   90    89.568    B

 -------------------------------------------------------------------------


 4. 표준입력함수

  1)프로그램 내부 : Memory

  2)프로그램 외부 : 키보드

  3)getchar()

    - 키보드로부터 한 개의 문자를 입력받는 함수

    - Syntax

       문자변수 = getchar()

  4)gets()

    - 키보드로부터 문자열(한개 이상의 문자)를 입력받는 함수

    - Syntax

      gets(문자열변수)

      문자열변수 : char *, char array

  5)scanf()

    - 키보드로부터 서식에 맞게 입력 받는 함수

    - 다양한 데이터타입을 받을 수 있다.

    - 입력서식 : %c, %d, %e, %f, %o, %u, %x %s

    - 주의사항

      a. 변수의 이름으로 입력받는 것이 아니라, 변수의 시작주소로 입력받는다.

      b. 입력서식 뒤에 escape sequence 를 넣을 수 없다.

      c. Enter key에 주의하자. --> getchar(), scanf("%*c") 사용해서 엔터키를 날린다. fflush()를 이용한 방법도있음(버퍼를 비움).

    -Syntax

      scanf("입력서식1, 입력서식2, 입력서식3,...", 입력대상1, 입력대상2, 입력대상3, ....)



------------------------------------

(3)

  char munja;

  printf("한개의 문자 입력 : ");

  munja = getchar();

  printf("%c를 입력했음\n", munja);

출력:

한개의 문자 입력 : A

A를 입력했음

출력:

한개의 문자 입력 : 56

5를 입력했음

출력:

한개의 문자 입력 : 강감

▒를 입력했음

(한글은 2바이트라서 한개의 문자로 치기엔 크기가 크다)

---------------------------------------------------

(3)

  char ch, ch1, ch2;

  printf("문자3개 입력 : ");

  ch = getchar();

  ch1 = getchar();

  ch2 = getchar();

  printf("%5c%5c%5c\n", ch, ch1, ch2);

출력:

문자3개 입력 : ABC

    A    B    C

-------------------------------------------------------------

(3)

  char ch, ch1;

  printf("첫번째 글자 입력 : ");

  ch = getchar();

  printf("두번째 글자 입력 : ");

  ch1 = getchar();

  printf("ch = %c, ch1 = %c\n", ch, ch1);

출력:

첫번째 글자 입력 : A

두번째 글자 입력 : ch = A, ch1 =

(첫번째 글자 입력후 엔터를 치면 위와 같이 두번째 글자를 입력받지 않고 결과값을 출력한다. ch는 A고 ch1은 enter가 들어갔다.)


입력버퍼에서 엔터를 지워주어야만하는데, 아래와 같이 첫번째 글자 입력후 getchar();를 한번 더써주는 방법이 있다

  char ch, ch1;

  printf("첫번째 글자 입력 : ");

  ch = getchar();

  getchar();

  printf("두번째 글자 입력 : ");

  ch1 = getchar();

  printf("ch = %c, ch1 = %c\n", ch, ch1);

-----------------------------------------------------------------

(4)

  char irum[128];

  printf("what's your name ? ");

  gets(irum);

  printf("Your name is %s.\n", irum);

출력:

what's your name ? mino

Your name is mino.

(배열의 나머지 값들인 쓰레기들을 출력하지 않고 null 이 들어가 있어 자동으로 끊어준다)

출력:

what's your name ? 미노

Your name is 미노.

(한글도 잘나온다)

(그러나 char irum[128];  대신 char * irum; 이렇게 써줘도 잘 된다. 하지만 터보C에서는 에러가난다. 공간이 미리 준비가 안되어 있어서... malloc을 써줘야햅)

-------------------------------------------------------------------

(4)

  char * irum, * address;

  printf("당신의 이름은 ? ");

  gets(irum);

  printf("당신의 주소는 ? ");

  gets(address);

  printf("irum = %s, address = %s\n", irum, address);

출력:

당신의 이름은 ?  미노

Segmentation fault (core dumped)

(이름을 쓰고 엔터를 치면 위와 같이 나온다)

( char * irum, * address;를  char irum[50], address[100];로 바꿔주면  아래와 같이 출력이 잘된다.)

출력 :

당신의 이름은 ? 미노

당신의 주소는 ? 알아서 뭐해

irum = 미노, address = 알아서 뭐해

---------------------------------------------------------------------

(4) 포인터를 사용할 것이라면 

#include <stdio.h>

#include <stdlib.h> //malloc을 사용하기 위해 추가.

int main()

{

  char * irum = (char *)malloc(50); //50바이트의 메모리 확보. irum은 그 50바이트 메모리의 시작 주소를 가지고 있다.

  char * address = (char *)malloc(100); //malloc은 void형이기 때문에 형변환을 해야한다

  printf("당신의 이름은 ? ");

  gets(irum);

  printf("당신의 주소는 ? ");

  gets(address);

  printf("irum = %s, address = %s\n", irum, address);

  return 0;

}

출력:

당신의 이름은 ? 미노

당신의 주소는 ? 알아서 뭐해

irum = 미노, address = 알아서 뭐해

-----------------------------------------------------------------------

(5)

  int age;

  printf("당신의 나이는 ? ");

  scanf("%d", &age);

  double ki;

  printf("당신의 신장은 ? ");

  scanf("%lf", &ki); //lf(long float를 쓰던지 아니면 ki를 float로 써줘야함. 그냥 f면 신장이 출력이 안됨.

  char grade;

  printf("당신의 학점은 ? ");

  scanf("%*c%c", &grade); //학점쓰기 전에 getchar()로 엔터키를 날려주던지 아니면 이와 같은 방법으로 엔터키를 날린다. 여기서 %c에만 문제가 생기는 이유는 enter key를 아스키코드 값으로 인식하기 때문. fflush()를 이용한 방법도있음(버퍼를 비움).

  char irum[30];

  printf("당신의 이름은 ? ");

  scanf("%s", irum); //배열 자체가 주소이므로 &을 쓰지 않는다.

  printf("%d\t%7.1f\t%c\t%s\n", age, ki, grade, irum);

출력:

당신의 나이는 ? 22

당신의 신장은 ? 222

당신의 학점은 ? B

당신의 이름은 ? 미노

22        222.0 B       미노

--------------------------------------------------------------------

(5)

  int kor, eng; printf("국어점수, 영어점수 입력 : ");

  scanf("%d%d", &kor, &eng);

  printf("kor = %d, eng = %d\n", kor, eng);

  return 0;

출력:

국어점수, 영어점수 입력 : 90100

(이렇게 입력하면 국어점수를 90100으로 인식한다)

국어점수, 영어점수 입력 : 90 100

kor = 90, eng = 100

(띄어쓰기를 한번 해주면 이렇게 인식을 잘 한다)

------------------------------------------------------

(5)

  int kor, eng; printf("국어점수, 영어점수 입력 : ");

  scanf("%3d%3d", &kor, &eng); //3자리씩 입력받는다는 것을 명시해 놓았기 때문에 띄어쓰기를 하지않아도 된다. 그러나 양이 많아졌을 때 불편.

  printf("kor = %d, eng = %d\n", kor, eng);

출력:

국어점수, 영어점수 입력 : 090100

kor = 90, eng = 100

-------------------------------------------

(5)문제점:

  char irum[100], irum1[100];

  printf("이름과 별명을 넣으세요 : ");

  scanf("%s%s", irum, irum1);

  printf("irum = %s, irum1 = %s\n", irum, irum1);

출력:

이름과 별명을 넣으세요 : 태 진아 왕십리 망치

irum = 태, irum1 = 진아

(성과 이름을 띄고 별명도 띄고... 공백이 있을때 문제가 생긴다)

------------------------------------------

#include <stdio.h>

#include <stdlib.h>

int main()

{

  char * hakbun = (char *)malloc(7); //6자리+null자리

  char irum[50];

  int kor, eng, mat, tot;

  double avg;

  printf("학번 : ");

  scanf("%s", hakbun);

  printf("이름 : ");

  scanf ("%s", irum);

  printf("국어 : ");

  scanf("%d", &kor);

  printf("영어 : ");

  scanf("%d", &eng);

  printf("수학 : ");

  scanf("%d", &mat);

  tot = kor + eng + mat;

  avg = tot / 3.;

  puts("                성적관리프로그램*");

  puts("학번    이름    국어    영어    수학    총점    평균");

  puts("-------------------------------------------------");

  printf("%-10s%10s%5d%5d%5d%5d%10.2f\n", hakbun, irum, kor, eng, mat, tot, avg);

  return 0;

}

출력:

학번 : 145525

이름 : 조성모

국어 : 100

영어 : 78

수학 : 90

                성적관리프로그램*

학번    이름    국어    영어    수학    총점    평균

-------------------------------------------------

145525     조성모  100   78   90  268     89.33

--------------------------------------------------------------------------------


5. 파일 출력

 1)파일 포인터

   FILE * 

 2) fopen() ~ fclose()

 3) fputc

   - 지정된 파일로 문자 한 개를 출력하는 함수

   - lineskip 이 수행 안됨

   - Syntax

    fputc('문자형리터럴' | 문자변수 | 정수형리터럴 | 정수변수 | 수식, FIME*);

  4) fputs()

    - 지정된 파일로 여러개의 문자(한개 이상의 문자들)을 출력하는 함수.

    - lineskip 이 수행 안됨

    - Syntax

    fputs("문자열" | 문자열변수, FILE *);

  5) fprintf()

    - 지정된 파일로 서식에 맞게 출력하는 함수

    - linskip이 수행 안됨

    - Syntax

      fprintf(FILE *, "출력서식1, 출력서식2, 출력서식3,...", 출력대상1, 출력대상2, 출력대상3,...)

  6) fgetc()

    - 파일로부터 한 개의 문자를 입력받는 함수

    - 반드시 파일 존재여부를 확인해야 함.

    - Syntax

      문자변수 = fgetc(파일포인터)

  7) fgets()  -(단점 : 읽으려고 하는 글자의 수를 알아야한다)

    -파일로부터 여러 개의 문자(한 개 이상의 문자)를 입력받는 함수

    - 반드시 파일존재여부를 확인해야 함.

    -Syntax

      fgets(포인터변수 | 배열명, 읽을 글자수 + 1, 파일포인터)

  8) fscanf()

    -지정된 파일로부터 서식에 맞게 여러 타입의 수치를 입력받는 함수

    - 반드시 파일존재여부를 확인해야 함.

    -Syntax

      scanf(FILE *, "입력서식1, 입력서식2, 입력서식3,...", 입력대상1, 입력대상2, 입력대상3,...);


------------------------------------------------

(3)

  //파일 포인터 선언

  FILE * ptr;

  //출력할 파일을 오픈한다.

  ptr = fopen("data.dat", "w"); //파일이 없다면 생긴다. 있다면..? 내용이 사라지고 새로운내용만 쓰임.

  fputc('A', ptr);

  fputc(66, ptr);

  fputc('\n', ptr);

  char ch = 'M';

  int num = ch +5;

  fputc(ch, ptr);

  fputc(num, ptr);

  fputc('\b', ptr);

  fputc('Z', ptr);

  fputc('\t', ptr);

  fputc('z', ptr);

  //파일 닫기

  fclose(ptr);

결과는 data.dat의 파일이 만들어지며 내용이 들어간다. cat으로 보면 아래와 같다.

AB

MZ      z

ptr = fopen("data.dat", "w");의 부분을 ptr = fopen("/home/mino/CRoom/0226/dat.dat", "w");로 바꿔주어도

내가 작업하는 위치에 놓는 것이기 때문에 결과는 같다. 상대경로할 것인지 절대경로로 할것인지의 선택이다. 

만약 없는 폴더의 위치를 지정하면 실행되지 않는다.

---------------------------------------------------------------------

(4)

  FILE * ptr;

  ptr = fopen("data.rep", "w");

  fputs("hello", ptr);

  fputs("world\n", ptr);

  char * irum = "설운도";

  char address[] = "서울시 강남구 역삼동 121번지";

  fputs(irum, ptr);

  fputs("\n", ptr);

  fputs(address, ptr);

  fputs("\n", ptr);

  fclose(ptr);

결과는 data.rep가 만들어지며, data.rep의 내용을 보면 아래와 같다.

helloworld

설운도

서울시 강남구 역삼동 121번지

----------------------------------------------------------------------------

(5)

  char * irum = "태진아";

  int kor = 60, eng = 100, mat = 80;

  char grade = 'B';

  FILE * ptr;

  ptr = fopen("sungjuk.txt", "w");

  fprintf(ptr, "이름 = %10s\n", irum);

  fprintf(ptr, "kor = %5d, eng = %-10d, mat = %08d\n", kor, eng, mat);

  fprintf(ptr, "avg = %10.2f\n", (kor + eng + mat) / 3.);

  fprintf(ptr, "Grade = %c\n", grade);

  fclose(ptr);

  puts("Success"); //터미널창에서 아무것도 안나오면 심심하니까... 

결과는 sungjuk.txt파일에 , 아래와 같은 내용이 저장됨

이름 =  태진아

kor =    60, eng = 100       , mat = 00000080

avg =      80.00

Grade = B

-------------------------------------------------------------------------------

(6)

int main()

{

  char ch1, ch2, ch3;

  FILE * ptr;

  ptr = fopen("test.txt", "r");

  if(ptr != NULL)

  {

        ch1 = fgetc(ptr);

        ch2 = fgetc(ptr);

        ch3 = fgetc(ptr);

        printf("%c, %c, %c\n", ch1, ch2, ch3);

  }

  else

  {

        puts("File Not Found");

        return -1; //비정상적인종료

  }

  fclose(ptr);

  return 0;

}

파일이 없을 때 결과 :

File Not Found

파일을 cat > test.txt명령어로 만들어준 후 내용을 ABC를 넣어주고 다시 실행하면 :

A, B, C 의 결과 값을 볼 수있다.

(널값(ASCII code 0, \0),  NULL (널번지))

-------------------------------------------------------------------------------

(7)

미리 input.rep 파일을 만들어 내용을 넣어줌. 내용은 KBSMBCSBSCBS로 써줌.

#include <stdio.h>

#include <stdlib.h>

int main()

{

  char * str = (char *)malloc(4); //3글자 읽기위해 크기는 4로 잡아줌(null 크기 1차지)

  char * str1 = (char *)malloc(4);

  char * str2 = (char *)malloc(4);

  FILE * ptr;

  ptr = fopen("input.rep", "r");

  if(ptr != NULL){

        fgets(str, 4, ptr);

        fgets(str1, 4, ptr);

        fgets(str2, 4, ptr);

  }else{

        puts("File Not Found"); return -1;

  }

  printf("str = %s, str1 = %s, str2 = %s\n", str, str1, str2);

  fclose(ptr);

  return 0;

}

출력:

str = KBS, str1 = MBC, str2 = SBS

------------------------------------------------------------------------------------

(8)

만들어주고 cat > sungjukdat.dat

145525   태진아   56   78   100

#include <stdio.h>

int main()

{

  //파일입력 --> 표준출력

  char hakbun[7], irum[30];

  int kor, eng, mat, tot;

  double avg;

  FILE * ptr;

  ptr = fopen("sungjukdata.dat", "r");

  if(ptr == NULL){

        puts("File Not Found"); return -1;

  }else{

        fscanf(ptr, "%s%s%d%d%d", hakbun, irum, &kor, &eng, &mat);

  }

  tot = kor + eng + mat;

  avg = tot / 3.;

  printf("hakbun = %s, irum = %s\n", hakbun, irum);

  printf("kor = %d, eng = %d, mat = %d, tot = %d, avg = %.2f\n", kor, eng, mat, tot, avg);

  fclose(ptr);

  return 0;

}

출력 :

hakbun = 145525, irum = 태진아

kor = 56, eng = 78, mat = 100, tot = 234, avg = 78.00

--------------------------------------------------------------------------------------------


파일 입력 -> 파일 출력


cat > student.data 해서 아래와 같이 만들어주고

조성모   25   178.4   aaa@google.com

설운도   50   165.2   bbb@microsoft.com

이미자   60   145.7   ccc@facebook.com

아래처럼 코드를 짜서

#include <stdio.h>

int main()

{

  FILE * input, * output;

  input = fopen("student.data", "r");

  output = fopen("result.data", "w");

  if(input == NULL){

        puts("File Not Found"); return -1;

  }else{

        fputs("             *** 학생레코드\n", output);

        fputs("이름   나이   신장   Email\n", output);

        fputs("----------------------------------\n", output);

        char irum[30], email[50];

        int age;        double ki;

        fscanf(input, "%s%d%lf%s", irum, &age, &ki, email);

        fprintf(output, "%s, %d, %.1f, %s\n", irum, age, ki, email);

        fscanf(input, "%s%d%lf%s", irum, &age, &ki, email);

        fprintf(output, "%s, %d, %.1f, %s\n", irum, age, ki, email);

        fscanf(input, "%s%d%lf%s", irum, &age, &ki, email);

        fprintf(output, "%s, %d, %.1f, %s\n", irum, age, ki, email);

  }

  fclose(input);

  fclose(output);

  return 0;

}

결과 값을 보면

mino@Ubuntu-22:~/CRoom/0226$ cat result.data

             *** 학생레코드

이름   나이   신장   Email

----------------------------------

조성모, 25, 178.4, aaa@google.com

설운도, 50, 165.2, bbb@microsoft.com

이미자, 60, 145.7, ccc@facebook.com

--------------------------------------------------------------------------------------------



예제............ 지금까지 배운내용을 토대로 코드를 작성.

#include <stdio.h>

#include <stdlib.h>

int main()

{

  char * author, * date, *objective, * environment;

  int num, num1;

  char * path;

  FILE * output;


  author = (char *)malloc(20);

  date = (char *)malloc(11);

  objective = (char *)malloc(50);

  environment = (char *)malloc(100);

  path = (char *)malloc(100);

  printf("저장할 파일의 이름 : ");

  gets(path);

  output = fopen(path, "w");

  printf("Author : ");

  gets(author);

  printf("Date : ");

  gets(date);

  printf("Objective : ");

  gets(objective);

  printf("Environment : ");

  gets(environment);

  printf("정수 두개를 연달아 입력해 주세요 : ");

  scanf("%d%d", &num, &num1);


  fputs("                      보고서\n\n\n", output);

  fprintf(output, "1. 작성자 : %s\n", author);

  fprintf(output, "2. 작성날짜 : %s\n", date);

  fprintf(output, "3. 작성목적 : %s\n", objective);

  fprintf(output, "4. 작성환경 : %s\n", environment);

  fputs("-----------------------------------------\n", output);

  fprintf(output, "%d + %d = %d\n", num, num1, (num + num1));

  fprintf(output, "%d - %d = %d\n", num, num1, (num - num1));

  fprintf(output, "%d x %d = %d\n", num, num1, (num * num1));

  fprintf(output, "%d / %d = %.2f\n", num, num1, ((float)num / num1));

  fprintf(output, "%d %% %d = %d\n", num, num1, (num % num1)); //%%를 통해 %하나가 출력될 수 있게.

  fputc('\n', output);

  fputc('\n, output);

  fputs("Report End...\n", output);

  fclose(output);

  puts("Success");

  return 0;

}

그리고 차례차례 나오는 질문을 아래와 같이 작성하면

/home/mino/Desktop/result.report

태진아

2014-02-26

금일 수업 내용 정리

Ubuntu 13.10, vim, gcc 4.8.1

45 23

바탕화면에 우분투 result.report 라는 파일이 생겼다. 그것을 gedit으로 열어보면

                      보고서



1. 작성자 : 태진아

2. 작성날짜 : 2014-02-26

3. 작성목적 : 금일 수업 내용 정리

4. 작성환경 : Ubuntu 13.15, vim, gcc 4.8.1

-----------------------------------------

45 + 23 = 68

45 - 23 = 22

45 x 23 = 1035

45 / 23 = 1.96

45 % 23 = 22



Report End...


위와같이 출력됨을 볼 수 있다.

'Java & Oracle' 카테고리의 다른 글

c 함수 day10  (0) 2014.02.28
c 제어문 day9  (0) 2014.02.27
c 변수, 연산자 day7  (0) 2014.02.25
c 시작 day6  (0) 2014.02.24
ftp 연결, ping day5  (0) 2014.02.21

+ Recent posts