2012-01-24 2 views
2

이것은 첫 번째 comp sci 과제의 일부로, 여러 방정식을 평가하는 C 프로그램을 작성하고 있습니다. 여기에 남았습니다 결과를 제공하는 코드는 : 프로그램이 실행printf 아포스트로피가 C에서 Æ로 대체되었습니다.

// 1. Newton’s Second Law of Motion 
printf("Newton's Second Law of Motion \nPlease enter mass and acceleration as decimal-point values separated by a comma (ex. 150.0,5.5): "); 
scanf("%lf, %lf", &mass, &accel); 
printf("Newton’s Second Law of Motion: force = mass * acceleration = %lf * %lf = %lf\n\n\n", mass, accel, mass*accel); 

, 미세 최초의 printf 표시, 대신에 "뉴턴의"의 두 번째에 "NewtonÆs".

+3

http://en.wikipedia.org/wiki/Mojibake –

+1

* 텍스트 *는 매우 복잡한 주제입니다. C 언어 학습에 집중하는 동안 준비가 될 때까지 기본적인 영어 문자를 고수하면서 디지털 서적의 복잡함에 대해 생각해보십시오. –

+1

유니 코드 코드 포인트 \ u2019, "오른쪽 작은 따옴표"입니다. 컴파일러와 콘솔/터미널을 사용하는 후에는 그다지 많은 부분을 인식 할 수 없습니다. 웹 페이지에서 복사하지 않고 코드를 직접 작성하십시오. –

답변

8

유니 코드를 사용하고 있습니까?

아포스트로피에 차이가있는 것 같습니다 : Newton’sNewton's입니다. 어딘가에서 복사 붙여 넣기 않았다?

+0

포인트를 받으면 유니 코드 소스 일 가능성이 있습니다 ... – Firoso

+2

아, 그럴 것입니다! 그것은 그것을 고쳤다. 고마워요! – MatronSaint

1

여기서 가장 일반적으로 발생하는 현상은 손으로 입력하는 대신 소스에서 텍스트를 복사 한 것입니다. 이 소스에는 7/8 비트 ASCII 문자 대신 UNICODE 인코딩 문자가 사용되었을 가능성이 큽니다.

내가 틀릴 수도 있지만 printf는 8 비트 ASCII 만 지원하므로 UNICODE 와이드 문자 아포스트로피의 주요 데이터는 잘립니다.

당신이 원하는 캐릭터는 '

입력 한 문자가 소수 (92)는'Æ이

내가 그 그것을 정리할 희망으로 코드 페이지에 따라하는 표시 될 수 0x27에 (십진수 39)입니다.

5

값이 0x92 인 은 현재 적용되는 코드 페이지에 따라 다른 시스템에서 다르게 표시됩니다.

Code page 437 (미국에서 공통)은이 값으로 Æ 문자를 표시합니다.

codepage 1252 (서유럽 어)과 같은 기타 코드 페이지는 입니다.

2

아포스트로피에는 두 개의 다른 문자가 사용됩니다. 첫 번째 '은 모든 현대 문자 집합의 기본에있는 ASCII 문자 집합의 일부이며 모든 문자 집합에서 동일합니다. 두 번째 은 기본 문자의 일부가 아닌 확장 문자이며 문자 세트 나 코드 페이지에 따라 다른 해석이 적용됩니다. 문자 ÆWindows-1252 인코딩의 0x00c6 위치에 있습니다.

관련 문제