2010-02-28 4 views
1

나는 K & R의 샘플 프로그램 중 하나를 장난,이혼합 데이터 유형 결과

#include <stdio.h> 

main() 
{ 
    double nc; 

    for (nc = 0; getchar() != EOF; ++nc) 
     ; 
    printf("%lf\n", nc); 
    putchar(nc); 
} 

은 3.000000이다 출력 (I 완전히 예상)를 생산하는 것을 알 수 있었다 다음 그것 위에서 마음과 함께 새로운 선 (나는 완전히 기대하지 않았다). 왜 마음에 새 라인을 출력할까요? 데이터 유형을 혼합하는 것과 관련이 있다고 가정합니다.

+0

왜 나는 새로운 라인을 알고 있습니다 - 단지 심장 모양에 관심이 있습니다. – Laura

답변

2

double을 인수로 사용하여 putchar()을 호출하려고합니다. 암시 적으로 int으로 유형 변환 된 다음 해당 문자가 출력됩니다. 웬일인지 당신의 성격이 문자 3으로 마음을 갖기 때문에 마음을 얻습니다. 당신이 그것을 실행하고 EOF 앞에 뭉치를 더 입력하면 다른 성격을 갖게됩니다. 내 컴퓨터에서 프로그램은 마음을 움직이지 않지만 더 많은 문자를 입력하면 그 다음 줄에서 원하는 것을 얻을 수 있습니다. ASCII 문자 3은 ETX이고, 텍스트의 끝이므로 왜 당신이 마음에 들지 모르겠다. 이상한 로케일이나 문자 세트를 사용하고 있는가? 컴퓨터에이 프로그램을 출력 기능 :

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    putchar(3); 
    putchar('\n'); 
    return 0; 
} 

편집 :

wikipedia에서 위치 3. 설정 캐릭터에 무엇 때문에 당신은 마음을 얻고 :

코드에서 페이지 437, IBM PC의 원래 문자 집합, 값 3 (16 진수 03) 심장 기호를 나타냅니다. 이 값은 많은 문맥에서이를 오버라이드하는 비 인쇄 ETX 제어 문자와 공유됩니다.

+0

그냥 실행하면 마음이 생깁니다. :) – Laura

+0

@ 로라, 맞아. 나는 좀 더 많은 정보를 가지고 나의 대답을 편집했다. 캐릭터 3은 심장이며 그게 전부입니다. –

+0

감사! 오늘 조금 더 배웠습니다 :) – Laura