입출력함수
- 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 |