진도가 많이 늦습니다. 오늘 하루에 두개 업뎃-_-a
음.. 썰을 잘 풀수있을라나 ㅋㅋㅋ
-------------------------- 절취선 ----------------------------------------------------
자 기본 데이터타입까지 살펴보았지?
이번에는 우리가 볼게 기본 입출력에 관해서 보자. 기본 입력과 출력에 관해서 ^^
자... 우선 기본 출력부터...
여러분들이 제일 처음에 짠 소스코드
printf("Hello, World"); 이것을 기억하시는가? ㅋㅋㅋㅋ
자... 기본 출력중에 출력...
printf를 보자꾸나 ^^
printf("...");라는 말은 ""안의 ...를 출력해라는 뜻이야. 근데.. 지금처럼 보면 Hello, world라거나 이런거만
출력해줬잖아... 근데 만약 우리가 어떤 계산을 하고 그 결과를 알고싶어. 그러면 어떻게 출력해야할까?
그걸 위해서 C언어에서는 출력형식지정자(맞나?)인가를 써서 해결을해.. 자... 이제 새로운단어나왔다..
외우지마라..
너네가 int형 데이터를 출력하고싶다 (정수값을 출력하고싶다)면 %d
char형 데이터를 출력하고 싶다(문자값을 출력하고싶다)면 %c
실수형 (float)형 데이터를 출력하고싶다면 %f
좀긴실수(double)형 데이터를 출력하고싶다면 %f나 %lf (%lf추천)으로 출력을 해준다고 우선 외워두고 보자
그리고 번외적으로 %x출력은 16진수로 변환해서 출력해주는것이고 (이건 나중에 배우게 될것이야)
예)
int a,b,c;
a = 2; b=3; c = a+b;
printf("%d + %d = %d\n",a,b,c);
이 결과는 출력이 2 + 3 = 5 라고 나올거야
감이 좀 오려나? 음... 정수(int)를 printf를 이용하여 출력하고싶다면 %d로 사용한다는거
그리고 저기서 보면 알겠지만 %d가 3개면 int 데이터도 3개가 되야해.
음.. %d의 의미는 이자리에 int형 데이터의 값을 출력해줄래~ 하는것이기떄문에...
%d가 하나있으면 그자리에 값을 출력해줄 데이터가 1개, %d가 두개있으면 데이터가 2개
여기서 만약.... 음... 정수와 실수를 동시에 섞어서 쓸수있나요? 라고 물어본다면..
가능해
printf("%d / %d = %f\n",int,int,float); 이런식으로 사용이 가능하다는것이지
출력문은 이것저것 많이 출력해보도록 하고.. 그리고 한가지 주의사항은
%d로 출력할게 해놓고 float이나 double을 위치시키면...
예)
float a;
printf("%d\n",a);
이렇게... 그러면 아마 결과가 잘 나오진 않을거야 데이터타입떄 이야기했지? 우리가 int나 이런것을
지정해주는 이유는 그것을 어떻게 표현해줄까~ 하고 결정하려하는것이라고. 어떻게 읽어들여올지
그것을 지정하는것이기때문에... 데이터타입은 맞춰야해.
그러나 %c와 int의 조합은 정상적인 출력이 가능(int가 char의 표현범위를 넘어서지만 않는다면)
%d와 char의 조합도 가능(이경우는 글자가 출력이되는것이 아니라 해당 글자의 코드값이 출력된다오)
%x는 어떤타입도 가능해. 이걸 직접 말로만 하려니까 힘드네.. 흠.....
그리고 번외적인 이야기 하나 \n이란걸 쳤자나.. 이거는 무슨역할을 하냐하면...
우리가 막 글을 쓰다가 엔터키를 치면 커서가 다음줄 젤 앞으로 이동하지?
그리고 막 글을 또 쓰면 거기서부터 써지기시작할거고.
화면에 출력한다는것은 프로그램이 화면에 글씨를 쓰는거야
자... \n은 여기서 엔터키랑 같은 역할을 해. 한줄 넘겨서 새줄에 새로이 글자를 출력하려고할때
\n이라는 printf에서의
엔터키를 같이써주는거지. \다음에 바로 오는 문자에 따라서 특수한 키의 역할을 하는일을 해줘(tab키,엔터키등등) 엔터키역할은 \n, tab키역할을 \t라고 써주는거지.
그리고 한가지 더 있다면 \"도 있어 이것은 화면에 "를 출력해 주는 녀석이고. 만약 우리가 \ 라는 문자를 화면에 출력하고싶다면 \\ 로 써야하고... 이거는 그냥 한번 써봐 ^^
궁금한건 질문- ㅎㅎㅎㅎㅎ (이거 강좌 맞아? ㅋㅋㅋㅋ)
그리고나서 이제 입력을 보자. 입력은 우리가 컴퓨터한테 무언가를 알려주고싶을떄 사용하는것 ^^
가장 많이쓰는 scanf를 보고 오늘 1부는 여기서 마무리 ㅋㅋㅋㅋ
사용예제
scanf("타입",&변수); 이렇게 기억해
여기서 타입이라는것은 아까 위에서 본 %c,%d,%f정도만 기억해두자고 ㅋㅋ
scanf는 내가 어떤값을 어떻게 받아들여서 이걸 변수에 저장할게- 하는거야
그러면 내가 만약 정수값을 받고싶다면 int a라는 변수를 선언해두고
scanf("%d",&a); 라고 써주는거지.
그럼 내가 한번에 두개를 읽어오고싶다. 그러면 어떻게 읽어오면 될까?
printf처럼.. 붙이면 된단다.
scanf("%d%d",&a,&b); 이렇게 ^^
단 여기서 주의할사항은 %d%d라고 쓰고.. printf때처럼 \n을 같이 넣어주면 예상치 못한 결과가
나올수가 있으니까 주의하도록 하고 ^^
scanf("%d%d\n",&a,&b)라고 하며는 우리가 a입력하고, b입력하고 엔터키를 쳐야 그것이 전부 인식이 되는걸로 떠. 그래서 엔터키를 두번 땅땅 떄려줘야하는.. 그런일이 생기지. 잊지말아야할것... scanf에서는 \n을 붙이지 않는다.
그리고 또한가지 중요사항... 음.. 버그사항?
만약 우리가 입력한값이 잘 안나왔어... 그러면 &가 붙었는지 아닌지 확인을 꼭 해보길 바래 ^^
그리고 음... 입력받는 데이터 타입은 좀 맞춰야할거야..
while(scanf("%d",&n) != EOF){
printf("%d\n",n);
}
라는 코드가있어.. 이 코드가 하는 역할은 정수를 입력받으면 바로 출력을 해주는 구문인데...
1 2 3 4 5 a 1 2 3 이라고 입력을 주면..
이코드는 1,2,3,4,5,5,5,5,5... 이런식의 출력을 보여주게 될거야
이 이유는 설명하기 조금 복잡한데...
scanf해서 처음에 1을 입력받아 n에 저장하고 n을 출력 2를 입력받아 n에 저장하고 그걸출력 출력.. 잘 되가고있었어... 자 이번에 5가 입력되서 n에 저장하고 n을 출력했어... 그다음에 a가 입력되었지?
근데 a는 n에 저장이 안되었어. 따라서 n은 5를 가지고 출력 (우선 입력은 있었으니까) 그리고 a는 날아가지않고 대기 버퍼에 잠시 들어가있어.. 그러면 scanf가 받아올 내용이 담긴 버퍼에는 a , 1 이렇게 남아있어..
그러면 다시 또 a를 읽어버렸는데 안되니까 5가 다시한번더 출력... 그다음 입력이 또 들어왔는데 받아올 버퍼에는 a , 1, 2가 남아서 또 이 scanf가 a를 읽을라고 시도해... 계속 a를 읽을라고 시도하는일이 생긴단다.
결국 치명적인 버그가 남게되는것이지. 음.. 이거는 굳이 이해하지 않아도 좋아.. 다만 내가 말해주고싶은것은
데이터타입을 맞춰라~ 정수를 읽겠다고 했으면 정수를 입력시켜줘 문자넣지말고. 안그럼 뻑난다~
오늘내용은 직접 이것저것 입력해보고 출력해보고 하면서 익힐것!
그럼 이제 이어서 바로 오늘 막장강의 2부 시작할게
Posted by 모니터에습기찼어