c언어 입문한 초보입니다 구제해주세요엉엉

vjihovjiho의 이미지

안녕하세요
고등학교때 씨를 조금 끄적거리다 대학생이된 프로그래밍을 좋아하고 좋아하고싶은 신입생입니다
이제 제가 원하는 공부를 할수있어 기쁘고 새롭고 불안하기도하네요ㅎ
그런저에게 시련이 닥쳤습니다
윤성우씨 저 열혈강의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번 실행되었다는데 어찌된건가요?

이상입니다

이런 전문 포럼에 이런 너무 초보적인 질문을 해서 죄송합니다
저같은 초보자들이 갈만한 사이트가있나요? 추천해주시면 감사하겠습니다

익명 사용자의 이미지

printf() 는 fprintf(..., stdout) 이고, stdout 은 FILE* stream 입니다.

Linux 라면 man setvbuf 실행하시면 자세한 설명이 나옵니다.
Linux 가 아니라면, google.com 에서 setvbuf 의 man 페이지를 검색해서 읽어보세요.

bushi의 이미지

guest 로 글을 쓰니 수정이 안되는군요...
아래 답변들을 보고... 반복문도 모르는 사람으로 취급하는거냐고 열받지 마시고...
사과가 땅으로 떨어지는 이유를 궁금해하지 않는 일반인이 대부분이었다는 걸로 위안을 삼으시면 행복한 기분이 드실지도 모르겠습니다.

linebuffer 모드 일 때는 (버퍼가 꽉 차거나) '\n' 을 만나야 flush 되면서 출력됩니다.
't' 'w' 'o' '엔터' 를 입력하시는 동안 printf() 는 계속 반복 수행됐지만 출력하고자 한 내용은 버퍼에만 담겨져 있습니다.
맨마지막 '엔터' 을 입력했을 때 printf('\n') 이 실행되면서 flush 가 되어 비로소 버퍼의 내용이 화면으로 출력됩니다.
이것저것 다 귀찮은 경우에 사용하는 fflush() 함수가 버퍼를 강제로 flush 하는 함수입니다.

vjihovjiho의 이미지

정말감사합니다 배운지 얼마되지않았지만 버퍼쪽에 무언가가 있을것같다 했는데.... 그랬군요
bushi님의 답변을 100%는 아니지만 어느정도 알게되었습니다 정말감사합니다
100%알게될때까지 열심히 해보겠습니다 ㅎㅎ

익명 사용자의 이미지

do와 while 이 어떤 역할을 하는지 알아보세요.

vjihovjiho의 이미지

답변 감사합니다

cless11의 이미지

우선 do ~ while은 반복문입니다. 위 코드대로라면, 아래 두 줄을 반복적으로 실행하게 됩니다.
a=getchar();
printf("-%c",a);

아래 부분을 만날때까지 말이지요.
while(a!='e'); // 'e'가 입력되었으면 종료

getchar()는 한 글자만 입력받는게 맞는데, 한글자 한글자 입력할 때마다 printf()가 계속 실행되니까 여러 글자를 넣었을 때는 여러 글자가 출력됩니다.

이해가 되셨는지 모르겠지만, 반복문을 공부하시면 알게 되실거예요.

그리고 저도 이제 졸업해서 현업에 막 들어온 신입이지만 조언해 드리자면, 책을 처음 보다가 모르는게 나오면 일단 지나가 보세요.
한번 쭉 훑고 처음부터 다시 또 다시 여러번 보면 됩니다.

vjihovjiho의 이미지

답변 감사합니다
제가 한번 막히면 끝을 봐야 풀리는 성격이라서요 ㅎㅎ
감사합니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.