1

私は非常に単純な 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;
}

上記のプログラムを実行すると、cの値をスペイン語の文字セットにある「á」として入力し、Windowsでは「Alt + 160」と入力します。これは、コンピューターがプレーンな古い文字を上記の署名付き文字として実装しているためですプログラムは 'á' の整数値を -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++ を使用しています

4

1 に答える 1

2

先ほど、160 は DOS のコードではないと言いáましたが、間違っていました。コード ページ CP437 別名 DOS です。Windows (CP1252) コード ページでáは 225 ですが、Windows はコンソールで Windows コード ページを使用していないようです。

エディターは、CP437、CP1252、UTF8、またはその他のものを使用する場合と使用しない場合があります。16 進エディタでプログラムを確認してください。さらに良いことに、特に Windows ではもちろん、それ以外の場所でも、プログラム テキストではプレーンな 7 ビット ASCII 以外は決して使用しないでください。これらは、同じ OS の同じバージョンを実行している異なるコンピューター間でも移植できず、標準では許可されていません。彼らは来てあなたを噛みます。プログラムで非 ASCII 文字列が必要な場合は、データ ファイルから読み取り、決してソースに埋め込まないでください。

プログラムでテキストを扱うときは、常に正しいエンコーディングが使用されていることを確認してください。これは単純ではありません。特に Windows では、Visual Studio と標準の C および/または C++ I/O ライブラリを使用している場合です。この組み合わせを UTF-8 で機能させることができませんでした。

于 2013-05-05T14:29:31.260 に答える