2017-11-11 5 views
0

내 주요 언어는 포르투갈어이므로 일부 문자는 변수로 읽고 읽으려고하는데 악센트가있는 단어가 있습니다 (예 : á é ó ú ... 등) 일하지 마라. 만약 내가 코드에서 작동하도록 설정했다면,하지만 사용자에게 입력을 요청하면 그렇지 않습니다. 실시 예 번호 :C 변수에 악센트 부호가있는 문자 저장

#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 

int main(int argc, char *argv[]) { 
    setlocale(LC_ALL, "Portuguese"); 

    char test, test2; //The same still happens using unsigned char 

    test = 'í'; 

    printf("Character: %c\n", test); 

    scanf(" %c", &test2); //The same still happens using fgets in case of a string 

    printf("Character: %c\n", test2); 

    system("pause"); 

    return 0; 
} 

컴파일 된 코드를 실행 보여준다

캐릭터 : ¡

경우 :

I (

문자 I, 입력 예 : 기다려 입력은 ''(공간) ','인쇄 ','인쇄 ','인쇄 '가 있습니다.

저는 프로그래밍 및 stackoverflow를 처음 사용했습니다. 실수를해서 유감스럽게 생각합니다. 모든 도움을 주시면 감사하겠습니다. 감사합니다.

아, 또한 Dev-C++을 사용하여 컴파일하면 차이가 있습니다.

+0

은, 문자 배열은 개별 바이트 (문자)로 만들어진다 관련 라이브러리 루틴. UTF-8 문자는 여러 바이트 (문자)입니다. – id0

+0

C 언어에서 'char'데이터 유형은 1 바이트를 보유합니다. 이름은 오해의 소지가 있습니다. 문자가 ASCII 세트에 속하는 경우 또는 레거시 8 비트 인코딩을 사용하여 문자가 인코딩 된 경우와 같이 잘 제어 된 상황을 제외하고는 대부분의 사람들이 문자라고 부르는 것을 보유 할 수 없습니다. 데이터 타입이'byte' 대신에'char'라는 이름을 갖는 것은 C가 ASCII 세트 외부의 문자들을 필요로하지 않는 영어 또는 줄 루어의 화자들에 의해 발명되었다는 것을 보여줍니다. – AlexP

+0

콘솔에서 utf-8을 지원하면 char (및 utf-8) 배열을 사용하여 문제를 해결할 수 있습니다. 그렇다면 귀하의 언어는 러시아어 또는 중국어 일 수도 있습니다. "% c"형식은 "% s"이되어야합니다. – user308879

답변

1

Cchar1 byte의 숫자 유형임을 알아야합니다. 실제로 단일 언어 문자 항목의 표현을 유지하기위한 것은 아닙니다. (코드 포인트라고도 함).

  1. 를 사용하여 단일 바이트 문자 인코딩 :

    당신은이 상황을 처리하는 두 가지 옵션이 있습니다 않습니다. 예 : iso-8859 제품군의 버전 (해당 경우 iso-8859-1). 이 은 모든 문자가 단일 바이트에 맞는지 확인합니다.

  2. 멀티 바이트에 대한 적절한 메커니즘을 사용하여 입력을 처리하십시오. . 당신은 char16_t 또는 char32_t 종류를 찾을 수 있으며 어쩌면 wchar_t를 사용하여 설정하고 C에서

관련 문제