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;
    }
}

既然第二个 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
}

请注意,有一条可能的路径与这两种情况都不匹配。假设letter'?',因为您正在返回int值,所以应该有迹象表明有问题(这取决于您如何处理错误处理)。

您的 this 函数的可能用法如下所示:

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

如果问题真的是关于离开函数的范围,那么这个问题也可能会有所帮助:
How to break out of a function


具体例子:

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;第一部分有一个声明。如果原始字符是大写的,则控制流甚至不会到达第二个嵌套if () { if () { } }部分。

于 2013-01-31T19:25:48.557 回答
1

既然第二个 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;
    }
}

如果 letter 最初是大写字母,则不会执行。它会打印出“您输入了一个大写字母。”,然后将其转换为小写,然后退出。

为什么转换在此语句的末尾而不是之前?

如果转换是在 cout 语句之前进行的,那将没有什么区别。

于 2013-01-31T19:30:22.123 回答