2013-05-05 5 views
1
난 그냥 문자가 아주 간단한 C++ 프로그램을 사용하여 연주했다

, 내가 상황을 설명하자 - :C++의 문자와 일치하지 않는 연산입니까?

#include<iostream> 

int main(){ 

    char c; 
    std :: cin >> c; 
    std :: cout << "The integer value of character entered is : " << int(c) << '\n'; 

    int m = 12 + 'á'; 

    std :: cout << m << '\n'; 

    return 0; 
} 

을 지금 내가있는 'A'로 C의 값을 입력 위의 프로그램을 실행할 때 스페인어 문자 집합 및 "Alt + 160"Windows에서 입력 한 및 내 컴퓨터가 서명 된 char 같은 일반 오래된 char 구현하기 때문에 위의 프로그램 출력을 때 á의 정수 값을 -96,하지만 이상한 일이 때 출력 m 값은 -84 대신 -19로 출력을 반환하지만 다음 프로그램을 실행하면 -

#include<iostream> 

int main(){ 

    signed char c; 
    std :: cin >> c; 
    std :: cout << "The integer value of character entered is : " << int(c) << '\n'; 

    int m = 12 + c; 

    std :: cout << m << "\n"; 

    return 0; 
} 

올바른 출력 값을 얻었습니다. 왜 모든 문자가 컴퓨터의 어떤 숫자에 의해 뒷받침된다면, 왜 m = 12 + 'á'가 m = 12 +로 평가되는식이 아닌지 왜 이런 일이 일어나는지 혼란 스럽습니다. -96). 이 문제와 관련하여 친절하게 저를 계몽하십시오. 나는 Windows 7과 Dev C++을 사용하고있다.

+2

많은 시스템에서 'á'은 [UTF-8] (http://en.wikipedia.org/wiki/UTF-8)로 * 두 * 바이트로 표시됩니다 .... –

+1

무엇을 얻을 수 있습니까? 'cout << (int) ('á');'? –

+0

@ArneMertz : 값으로 -31을 얻습니다. – AnkitSablok

답변

2

나는 160이 코드가 á ...이 아니라고 말했다. 글쎄, 나는 틀렸다. 코드 페이지 CP437 일명 도스. Windows (CP1252) 코드 페이지에서 á은 225이지만 분명히 Windows는 콘솔에서 Windows 코드 페이지를 사용하지 않습니다.

귀하의 편집자는 CP437, CP1252, UTF8 또는 기타 항목을 사용하거나 사용하지 않을 수 있습니다. 16 진수 편집기에서 프로그램을 확인하십시오. 프로그램 텍스트에서, 특히 Windows에서 일반 7 비트 ASCII를 사용하지 말고 다른 곳에서도 일반적으로 사용하십시오. 이러한 것들은 동일한 OS의 동일한 버전을 실행하는 다른 컴퓨터 사이에서도 이식 가능하지 않으며 표준에 의해 허용되지 않습니다. 그들은 와서 당신을 물 것입니다. 비 ASCII 문자열이 프로그램에 필요하면 데이터 파일에서 읽은 다음 소스에 절대 포함하지 마십시오.

프로그램에서 텍스트를 사용할 때 항상 올바른 인코딩이 사용되는지 확인하십시오. Visual Studio 및 표준 C 및/또는 C++ I/O 라이브러리를 사용하는 경우 Windows에서 특히 간단하지 않습니다. 이 조합을 UTF-8과 함께 사용할 수 없었습니다.