티스토리 뷰
Step 1.
#include <stdio.h>
void main(){
char a, b, c;
printf("Enter a character.\n");
scanf("%c", &a);
printf("\nThe character entered was %c.\n", a);
printf("Enter three more characters.\n");
scanf("%c%c%c", &a, &b, &c);
printf("\nThe characters entered were %c%c%c.\n", a, b, c);
}
문제
Explain the results obtained in Step1.
In particular, what was left in the input stream after executing scanf the first time?
프로그램을 실행시키기 전에는
a가 출력된 후 abc.가 출력되어야 한다고 생각했는데
어째서 실행해보면
a출력후 ab.만 출력되는 걸까
=============================================================
/* 키보드로 입력한 값을 scanf가 바로 읽는 것은 아닙니다.
키보드로 입력한 값이 버퍼라는 메모리에 저장되고
scanf함수는 그 버퍼를 읽어서 처리하게 됩니다.
그래서 발생한 문제입니다. 아래를 보시죠~ */
#include <stdio.h>
void main()
{
char a, b, c;
printf("Enter a character.\n");
scanf("%c", &a);
/* 위 부분에서 "a"를 입력하고 엔터를 누르면 입력버퍼에는
아래처럼 입력됩니다.
a
\n
...
여기서 scanf에 의해 첫 부분의 한 글자 즉 'a'만 버퍼에서 빠져나가
a변수에 저장됩니다. 그러면 입력버퍼에는
\n
...
개행문자 만이 남게됩니다.
*/
printf("\nThe character entered was %c.\n", a);
printf("Enter three more characters.\n");
scanf("%c%c%c", &a, &b, &c);
/*
위 scanf에서 "abc"를 입력받고 엔터를 누르면 입력버퍼에는
\n
a
b
c
\n
...
이런 상태로 저장이 되어버립니다.
맨 위에서 입력되었던 개행문자가 아직 버퍼에 남아있네요.
개행문자도 문자이므로 scanf함수에서 문자입력에 영향을 줍니다.
변수 a, b, c에 버퍼 첫부분부터 차례로 꺼내서 저장하면
a변수에는 '개행문자'가, b변수에는 'a'가, c변수에는 'b'가 들어갑니다.
그래서 출력해보면 한줄 바꾸고 ab가 출력됩니다.
*/
printf("\nThe characters entered were %c%c%c.\n", a, b, c);
}
이 문제를 해결하려면 위의 scanf함수 사용후 입력버퍼를 비우고
다시 버퍼를 쓰게 만들면 됩니다.
C에서는 fflush함수를 이용하여 버퍼를 비웁니다.
아래는 고친 소스입니다.
#include <stdio.h>
void main()
{
char a, b, c;
printf("Enter a character.\n");
scanf("%c", &a);
fflush(stdin); /* 입력버퍼를 비웁니다. */
printf("\nThe character entered was %c.\n", a);
printf("Enter three more characters.\n");
scanf("%c%c%c", &a, &b, &c);
printf("\nThe characters entered were %c%c%c.\n", a, b, c);
}
'IT > 프로그래밍' 카테고리의 다른 글
Framework?? (0) | 2007.07.06 |
---|---|
fread,frwire,fseek,ftell 정리 (0) | 2007.07.06 |
[c언어] scanf()함수로 gets()효과내기 (0) | 2007.07.06 |
QMap에서 데이터 찾을 때 쓰이는 방법 (0) | 2007.07.06 |
'const char [12]'에서 'LPCWSTR'(으)로 변환하는 방법 (1) | 2007.07.06 |
- Total
- Today
- Yesterday
- 지루박멸연구센타
- 열정의 힘을 믿는다
- Le4rN TO Cr4cK
- 디버깅에관한모든것(DebugLab)
- sysinternals
- FoundStone
- hashtab
- 보안-coderant
- 디바이스드라이버 개발자 포럼
- dualpage.muz.ro
- osronline.com - 드라이버 관련 정보 사이트
- NtInternals - NativeAPI Refere…
- pcthreat - spyware 정보 제공
- rootkit.com - 루트킷 관련 정보
- www.ntinternals.net
- WINE CrossRef. - source.winehq…
- tuts4you
- hex-rays
- idapalace
- idefense
- immunityinc
- threatexpert
- hdp.null2root.org
- www.crackstore.com
- crackmes.de
- www.who.is
- www.cracklab.ru
- community.reverse-engineering.…
- video.reverse-engineering.net
- SnD
- 클레이 키위
- reversengineering.wordpress.co…
- www.openrce.org
- www.woodmann.com
- PEID.Plusins.BobSoft
- roxik.com/pictaps/
- regexlib.com
- spyware-browser.com
- www.usboffice.kr
- regulator
- www.txt2re.com
- ietab.mozdev.org
- zesrever.xstone.org
- www.heaventools.com/PE-file-he…
- www.heaventools.com
- www.innomp3.com
- 울지않는벌새
- exetools.com-forum
- exetools.com
- utf8 conv
- robtex - IP trace
- onsamehost - same IP sites
- JpopSuki
- jsunpack.jeek.org
- wepawet.iseclab.org
- www.jswiff.com
- www.hackeroo.com
- winesearcher.co.kr
- khpga.org
- malwareurl.com
- anubis.iseclab.org
- www.crummy.com-eautifulSoup
- malwarebytes.org/forums
- bbs.janmeng.com
- blackip.ustc.edu.cn
- eureka.cyber-ta.org
- exploit-db.com
- ChatGPT
- systemd
- ubuntu
- ElasticSearch
- 신한저축은행
- SBI저축은행
- ROA
- O365
- 다올저축은행
- 피봇
- 시스템트래이딩
- 미국주식
- CriticalSection
- 군함도
- INVOICE
- 주택구매력지수
- 주식
- Pivot
- 주식트래이딩
- hai
- PIR
- 매매가격지수
- 전세매매지수
- 레고랜드
- 맥쿼리인프라
- logrotate
- 실시간트래이딩
- 사회간접자본
- 공공인프라
- 자동트래이딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |