轻微的问题。 (不使用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语句处理小写输入?
答案 0 :(得分: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
值,应该表明出现了问题(由您决定如何处理错误处理)。< / p>
此功能的可能用法如下所示:
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
答案 1 :(得分:2)
因为第一部分中有return 0;
语句。如果原始字符为大写,则控制流甚至不会到达第二个嵌套if () { if () { } }
部分。
答案 2 :(得分: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;
}
}
如果信件原本是大写字母,则不会执行。它会打印出“你输入一个大写字母。”,然后将其转换为小写,然后退出。
为什么转换在本声明的最后而不是之前?
如果转换是在cout声明之前,则没有任何区别。