[완료]c언어 질문입니다.

pinkfloyd의 이미지

안녕하세요. c 언어 공부하고 있습니다.
책이 원서라 진도가 안나가네요.
#include
/* count digits, white space, others */
main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n",
nwhite, nother);
}
The output of this program on itself is
digits = 9 3 0 0 0 0 0 0 0 1, white space = 123, other = 345

c programing language 책 전반부 한 코드입니다.

++ndigit[c-'0'];에서 c-'0'가 무슨뜻인지 모르겠습니다.

digit가 c 언어에서 무슨 뜻인지도 모르겠습니다. 그냥 숫자인가요?

마지막으로
The output of this program on itself is 해석 부탁드립니다.

익명 사용자의 이미지

digit 은 그냥 숫자 혹은 10진수의 숫자를 주로 의미합니다.

이 프로그램은 특정 문자열에서 숫자, 화이트 스페이스 ( newLine , 탭 , 스페이스 등등 )의 개수를 새는 것인가 보군요.

++ndigit[c-'0'] 에서 c-'0' 은 하나의 character 를 해당하는 숫자로 바꾸는 것입니다.

ascii 코드를 보시면 좀 더 명확할텐데요.

0 이 chartype 일때는 '0' 이 되고 그 다음부턴 차례대로 1씩 ascii code 를 증가하면 1,2,3,4,5... 가 됩니다.

즉 어떤 숫자가 몇번나오는지는 ndigit[0] 에 0이 몇번인지 ndigit[1] 에 1이 몇번인지 저장하는 것인데,

c - '0' 라는 것은 c 에 해당하는 문자를 숫자로 바꿔주는 역할을 합니다. 그래서 각 숫자가 몇번 나왔는지 정확히 기록되겠지요.

즉 c 가 '1' 이라면 ascii 코드 값으로 49 번이고 '0' 은 48번이므로 c - '0' 은 1 이 됩니다. ( 49 - 48 )

그런식으로 정확하게 ascii 문자열의 숫자를 제대로 된 숫자값으로 바꾸어 주는 것이지요.

auditory의 이미지

책이 원서라 진도가 안나가는데
꼭 원서를 볼 필요가 있을까요?

한글책들도 좋은 책들 많이 있는데요..

Hyun의 이미지

영어가 한글같지 않으면...
한글로 된 책 보심이 좋습니다.

pinkfloyd의 이미지

^^ 원서보는건 영어공부 겸해서 입니다.
죄송하지만 ++ndigit[c-'0']이란거에 대해서 다시 여쭙겠습니다.
c-'0'이란 것이 어떻게 해석되는지요?
예를들면 c = '0'이란 것은 c라는 변수에 0이란 문자를 assign한다 이런식으로요.

auditory의 이미지

ascii코드 이라는것에 대해서 생각해보시면 되겠습니다.

'0'과 0은 다르죠..

'0'을 (int type또는 char type의) 변수에 저장하기위해서는

해당하는 코드를 저장합니다..

c = '0' 이라는 것은 c = 45 이런것과 동일하죠..

45라는 숫자는 제가 임의로 쓴 숫자입니다.. 문자 '0'에 해당하는 아스키코드..

c - '0' 이라는 것은 예를 들어 c = '3' 이라고 했을때,

48 - 45 와 동일한 것입니다.. '0'의 실제 값은 모르지만

'3'과 '0'의 차이가 3이라는 것은 어느 기계에서나 확실하기 때문에

digit을 정수로 바꿀때 흔히 쓰는 코드입니다.

@ 영어공부를 위해서 원서를 보는것은 c 공부와 영어공부에 모두 도움이 되지 않는다고 말씀드리고 싶지만..
개인의 취향문제이니 생략하도록 하겠습니다~

pinkfloyd의 이미지

c-'0'에서 -가 빼기였군요. 다른 심오한 뜻이 있는줄 알았답니다.^^

ironiris의 이미지

영어공부를 원서로 하는 것은 좋지 않아보입니다.

저포함 공돌이들은 선언하다를 영어로 뭐라고 생각하십니까??
솔직히 말해보세요~ define 이라고 생각하지 않으셨나요?
하지만 정의를 내리다라는 뜻이라네요...
선언하다는 proclaim 인가구요..

whitenoise의 이미지

선언하다라고 하면 declare가 먼저 떠오르는군요. definition은 정의, declaration은 선언으로 구분해서 사용하는 경우가 대부분일 것 같습니다.

전공 원서로 영어 공부를 병행하는 것이 좋지 않다는 데에는 저도 동감입니다. 내용을 정확하게 이해하고 기억하려면 해당 언어 능력이 뒷받침되어 줘야 합니다. 사전을 찾아보고 문형을 파악하느라 정작 전공 내용을 파악하는데 필요한 집중력이 분산된다면 차라리 한학기나 1년 휴학하고 듣기, 읽기 능력을 갖춘후 다시 전공 공부에 전념할 것을 권합니다. 10년이상 내다보고 1년정도 투자해서 얻을 수 있는 정보의 질과 양을 비교해 본다면 아깝지 않은 선택이라 생각합니다. 쓰기, 말하기 제외하고 듣기, 읽기 능력만 어느 수준이상 올리는 건 단기간 집중으로 가능하기도 하구요.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.