0

各 if ステートメントの最後の行で、'ciphered_text' の現在の配列要素から 26 が減算されます。ただし、これは最初のセクションでのみ機能し、2 番目のセクションでは機能しないようです。誰でも理由がわかりますか?余談ですが、ここでelse ifまたはelseを使用する必要があるかどうかを誰かに教えてもらえますか。ありがとう。

    for(arrayelement = 0; arrayelement < size; arrayelement++)
    {
        ciphered_text[arrayelement] = (plain_text[arrayelement]);
        if ((int)(ciphered_text[arrayelement]) >= 65 && (int)(ciphered_text[arrayelement]) <= 90)
        {
            ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) + shiftkey;
            if (ciphered_text[arrayelement] > 90)
                ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) - 26;

        }

else if ((int)(ciphered_text[arrayelement])  >= 97 && (int)(ciphered_text[arrayelement]) <= 122)
        {
            ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) + shiftkey;
            if (ciphered_text[arrayelement] > 122)
                ciphered_text[arrayelement] = (int)(ciphered_text[arrayelement]) - 26;
        }
    }
4

1 に答える 1

2

ciphered_textはachar[N]またはaだと思いますchar*か?

失敗の原因として考えられるのは、

(int)(ciphered_text[arrayelement]) + shiftkey;

は127より大きく、char( ciphered_element[arrayelement])に格納する場合は負の値に変換されます。(注:が署名されている場合、範囲外の値の への変換charは実装定義です。)char

最も簡単な修正は、タイプを に変更することunsigned charです。

于 2012-11-16T12:41:11.253 に答える