0

わずかな問題。(toupper()およびtolower()関数を使用していません)数値を使用して大文字と小文字に変換することは理解していますが、C ++の本に従って、なぜこのステートメントの前ではなく最後に変換するのですか?:

if (letter >= 'A')  //test for 'A' or larger
    if (letter <= 'Z')  //test for 'Z' or smaller
    {
        cout << endl
             << "You entered a capital letter."
             << endl;
        letter += 'a' - 'A'; //Convert to lowercase
        return 0;
    }

if (letter >= 'a') //test for 'a' or larger
{
    if (letter <= 'z') //test for 'z' or smaller
    {
    cout << endl
         << "You entered a small letter."
         << endl;

    return 0;
    }
}

2番目のifステートメントが小文字の入力を処理するので、コード実行のこの時点で大文字を小文字に変換するのはなぜですか?

4

3 に答える 3

3

指定されたスニペットは、関数の本体である可能性があります。

int convert(char& letter)
{
    if (letter >= 'A' && letter <= 'Z')
    {
        letter += 'a' - 'A';
        return 0; // go out of this function...
    }
    else if (letter >= 'a' && letter <= 'z')
    {
        letter += 'A' - 'a';
        return 0; // go out of this function...
    }
    return -1; // it wasn't a letter as we expected
}

これらの2つの状況のいずれにも一致しない可能性のあるパスがあることに注意してください。letterそれが、値を'?'返しているのでint、何かが間違っているという兆候があるはずだとしましょう(エラー処理をどのように処理するかはあなた次第です)。

この関数の可能な使用法は次のようになります。

char letter = '!';
if (convert(letter) == 0)
    // success ...
else
    // error ...

質問が本当に関数のスコープを離れることに関するものである場合、この質問も役立つ可能性があります:
関数から抜け出す方法


具体的な例:

void convertLetterAndPrintResult(char& letter)
{
    if (convert(letter) == 0)
        std::cout << letter << std::endl;
    else
        std::cout << "ERROR: '" << letter << "' is not valid character!" << std::endl;
}

int main()
{
    char letter = '!';
    convertLetterAndPrintResult(letter);
    letter = 'g';
    convertLetterAndPrintResult(letter);
    letter = 'L';
    convertLetterAndPrintResult(letter);
}

出力:

ERROR: '!' is not valid character!
G
l
于 2013-01-31T19:43:20.443 に答える
2

return 0;最初の部分にステートメントがあるからです。元の文字が大文字の場合、制御フローは2番目のネストされた部分にさえ到達しませんif () { if () { } }

于 2013-01-31T19:25:48.557 に答える
1

2番目のifステートメントが小文字の入力を処理するので、コード実行のこの時点で大文字を小文字に変換するのはなぜですか?

それは

return 0

関数が終了したことを意味します。台詞

if (letter >= 'a') //test for 'a' or larger
{
    if (letter <= 'z') //test for 'z' or smaller
    {
    cout << endl
         << "You entered a small letter."
         << endl;

    return 0;
    }
}

文字が元々大文字だった場合は実行されません。「大文字を入力しました。」と出力され、小文字に変換されて終了します。

なぜ変換はこのステートメントの前ではなく最後にあるのですか?

変換がcoutステートメントの前であったとしても違いはありません。

于 2013-01-31T19:30:22.123 に答える