2017-05-24 13 views
1

私の大学では、キリル文字の入力とテキストをコンソールにサポートし、ファイルに書き込むCプロジェクトを書くための教訓があります。しかし、charデータ型とprintf scanf関数のみを使用することができます。C wchar_tの代わりに標準charデータ型を持つキリルコンソール入力

私はこれを行う方法を研究しており、UTF16にエンコードを設定してwchar_tを使用すると、キリル文字がサポートされるという解決法を見つけました。しかし、それは私にwchar_t関数wprintf、wscanfなどを使用させます。実際にはオプションではありません。

これは私が今持っているコードですが、コンソールに奇妙なシンボルが印刷されます。

int main(void) { 

setlocale(LC_ALL, "bg-BG"); 

char str[80]; 

printf("Въведи текст: "); //Enter text: 
scanf("%s", str); 

printf("Ти въведе: %s", str); //You entered: 

getch(); 

return 0; 

}

私が欠けている何かまたは誤解がありますか?私の知る限りでは、C/C++ ASCIIテーブルが範囲0を持つ唯一の英語の文字をサポート - 127

運とApparantly何とか
+0

> 127コードでキリル文字セットを持つなどWIN1251、KOI-8、のような8ビットエンコーディングがありますが、しかし、それは本当にでサポートされている文字セットに依存するであろうコンソール。 –

+0

私には明らかな解決策は、エンコーディングをUTF-8に設定することです。標準の 'char'ベースの関数を使ってUnicodeテキストを読み書きすることができますが、非ASCII Unicode文字はすべて2つ以上の' char'オブジェクトとして表現されることに注意してください。あなたが慎重でなければ、それはあなたを様々な方法で動かすことができます。 –

+0

なぜwchar_t関数は「本当にオプションではないのですか? – Toby

答えて

1

を私はそれがこれらの2を使用して動作させるための管理:

system("chcp 1251"); setlocale(LC_ALL, "UTF8"); だから、これが最終的なソリューションです。 :魔法のように

int main(void) { 

    system("chcp 1251"); 
    setlocale(LC_ALL, "UTF8"); 

    char str[80]; 

    printf("Въведи текст: "); 
    scanf("%s", str); 

    printf("Ти въведе: %s", str); 

    getch(); 

    return 0; 
} 

作品は今

関連する問題