c언어 입문한 초보입니다 구제해주세요엉엉
글쓴이: vjihovjiho / 작성시간: 수, 2013/03/13 - 12:43오전
안녕하세요
고등학교때 씨를 조금 끄적거리다 대학생이된 프로그래밍을 좋아하고 좋아하고싶은 신입생입니다
이제 제가 원하는 공부를 할수있어 기쁘고 새롭고 불안하기도하네요ㅎ
그런저에게 시련이 닥쳤습니다
윤성우씨 저 열혈강의c에서 getcahr 등 입출력함수의 쓰임과 기능, 버퍼쪽에서 약간 헷갈려서 C가 보이는 그림책을 현재 보고있습니다
그럼
질문하겠습니다!
1)
main(){
int a;
do{
a=getchar();
printf("-%c",a);
}while(a!='e');
}
라는 코드입니다 실행결과는
two <ㅡ(입력/엔터)
two
three <ㅡ(입력/엔터)
thre
ㅡㅡㅡㅡㅡ프로그램 종료
이런 e가 입력될때까지 문자를 받는 그런 프로그램입니다
제가 이해가 잘 안되는 부분은
1. getchar()는 문자 하나만 리턴하는 함수아닌가요? 그런데 어째서 two를 입력했더니 t 가아닌 two가 나오는 거지요?
2. printf에서 %c앞에 -를 입력해보고 실행해보니 입력된two가 -t-w-o가 되었습니다 이건 printf가 3번 실행되었다는데 어찌된건가요?
이상입니다
이런 전문 포럼에 이런 너무 초보적인 질문을 해서 죄송합니다
저같은 초보자들이 갈만한 사이트가있나요? 추천해주시면 감사하겠습니다
Forums:
printf() 는 fprintf(...,
printf() 는 fprintf(..., stdout) 이고, stdout 은 FILE* stream 입니다.
Linux 라면 man setvbuf 실행하시면 자세한 설명이 나옵니다.
Linux 가 아니라면, google.com 에서 setvbuf 의 man 페이지를 검색해서 읽어보세요.
guest 로 글을 쓰니 수정이 안되는군요... 아래
guest 로 글을 쓰니 수정이 안되는군요...
아래 답변들을 보고... 반복문도 모르는 사람으로 취급하는거냐고 열받지 마시고...
사과가 땅으로 떨어지는 이유를 궁금해하지 않는 일반인이 대부분이었다는 걸로 위안을 삼으시면 행복한 기분이 드실지도 모르겠습니다.
linebuffer 모드 일 때는 (버퍼가 꽉 차거나) '\n' 을 만나야 flush 되면서 출력됩니다.
't' 'w' 'o' '엔터' 를 입력하시는 동안 printf() 는 계속 반복 수행됐지만 출력하고자 한 내용은 버퍼에만 담겨져 있습니다.
맨마지막 '엔터' 을 입력했을 때 printf('\n') 이 실행되면서 flush 가 되어 비로소 버퍼의 내용이 화면으로 출력됩니다.
이것저것 다 귀찮은 경우에 사용하는 fflush() 함수가 버퍼를 강제로 flush 하는 함수입니다.
정말감사합니다!
정말감사합니다 배운지 얼마되지않았지만 버퍼쪽에 무언가가 있을것같다 했는데.... 그랬군요
bushi님의 답변을 100%는 아니지만 어느정도 알게되었습니다 정말감사합니다
100%알게될때까지 열심히 해보겠습니다 ㅎㅎ
do와 while 이 어떤 역할을 하는지 알아보세요.
do와 while 이 어떤 역할을 하는지 알아보세요.
답변 감사합니다
답변 감사합니다
우선 do ~ while은 반복문입니다. 위
우선 do ~ while은 반복문입니다. 위 코드대로라면, 아래 두 줄을 반복적으로 실행하게 됩니다.
a=getchar();
printf("-%c",a);
아래 부분을 만날때까지 말이지요.
while(a!='e'); // 'e'가 입력되었으면 종료
getchar()는 한 글자만 입력받는게 맞는데, 한글자 한글자 입력할 때마다 printf()가 계속 실행되니까 여러 글자를 넣었을 때는 여러 글자가 출력됩니다.
이해가 되셨는지 모르겠지만, 반복문을 공부하시면 알게 되실거예요.
그리고 저도 이제 졸업해서 현업에 막 들어온 신입이지만 조언해 드리자면, 책을 처음 보다가 모르는게 나오면 일단 지나가 보세요.
한번 쭉 훑고 처음부터 다시 또 다시 여러번 보면 됩니다.
답변 감사합니다 제가 한번 막히면 끝을 봐야 풀리는
답변 감사합니다
제가 한번 막히면 끝을 봐야 풀리는 성격이라서요 ㅎㅎ
감사합니다
댓글 달기