If语句和大括号.有/没有不同的结果
If Statements And Braces.. Different Result With/Without
好吧,我在学习c++的过程中,我在使用一个教程时遇到了一个奇怪的效果,我不太明白它是怎么发生的。
对于本教程(从提供的示例复制),我在类模板专门化中编写了一个函数,该函数检查字符是否为小写,然后将其改为大写:
char uppercase ()
{
//checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
if ((element >= 'a') && (element <= 'z'))
{
//changes value of "element" to be element + (value of A - Value of a)[-32]
element += 'A' - 'a'; //element = element + -32
return element;
};
};
现在,奇怪的是. .即使字符已经是大写的,这段代码仍然会被触发。所以如果我用一个值j来调用这个函数,很明显我得到的是j,和预期的一样。然而,如果我调用的值是'J',函数仍然会经过…所以不是函数不改变任何东西,而是返回'*'。
现在,有趣的是……如果我从if语句中去掉括号,它就会正常工作。所以,与
char uppercase ()
{
//checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
if ((element >= 'a') && (element <= 'z'))
//changes value of "element" to be element + (value of A - Value of a)[-32]
element += 'A' - 'a'; //element = element + -32
return element;
};
它完全按预期工作。用值'J'调用函数只返回'J',因为没有满足条件,因此没有执行任何代码。现在,我知道大括号在if语句中是可选的,但是教程说大括号在多个语句中是必需的。
还值得注意的是,在语句中使用大括号和普通的返回语句添加else可以达到预期的效果,但这应该是不必要的,对吗?
所以,基本上……我错过了一些关于大括号,或者这只是一个问题与编译器(Visual Studio 2012)?
这是每个设计,if
只接受一个语句,大括号使一个块语句。
如果你想要缩进作用域,使用Python。
您的代码的问题是,当if
语句不匹配时,您不返回任何东西,这会导致未定义的行为。你的编译器可能会给你一个警告。不要忽略编译器的警告。
第二段代码实际上是你想要的,当你的if
匹配时,只改变变量element
,但总是返回变量element
。
在第一种情况下,如果不满足条件,则不执行return
语句。假设函数返回的是垃圾。
在第二种情况下,因为没有大括号,所以只有一行依赖于条件。不管怎样,return
语句都会被执行。换句话说,第二个例子相当于:
char uppercase ()
{
//checks to see if "element"(char) is a lower-case letter between 'a' and 'z'
if ((element >= 'a') && (element <= 'z'))
{
//changes value of "element" to be element + (value of A - Value of a)[-32]
element += 'A' - 'a'; //element = element + -32
}
return element;
};
您有一个if语句。如果语句的计算结果为true,它将执行紧跟其后的操作。为了一次执行多个操作,必须将它们用花括号括起来。
你得到一个奇怪的答案,因为如果J 是大写,你的if语句是假的,你跳过大括号,你没有指定的返回值(因此无意义的返回值)。如果if语句不为真,则需要说明返回什么。
第二段代码可以工作,因为只有if语句后的第一行是由if控制的。这实际上是你的幸运-如果你想做两个操作,你仍然会得到垃圾。因此,通过将if语句置于花括号中来显式指定要执行的代码通常是一种良好的实践,即使它只是一个操作。
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- Fmod 函数清楚地输出一个预期的双精度值,但 if(fmod == 预期的双精度值)的计算结果不是 true
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 如何让编译器忽略这个计算结果为 false 的 if-constexpr?
- 使用嵌套 if 语句的意外结果
- if, else if, else 函数未准确显示结果
- 循环中的IF-ELSE条件:未来的迭代覆盖以前的迭代结果
- 当我使用if语句时,为什么该程序会给我不同的结果
- "if"条件的计算结果始终为 "true"
- if(!结果)返回false;的C 糖语法;
- 为什么我的 if/else 语句没有产生预期的结果?
- if/else优化测试结果令人震惊
- 在语句中调用 std::set 函数时出现意外"if"评估结果
- 使用if循环排序时出现意外结果-糟糕的算法
- 对于循环数组迭代,if循环测试索引是否为真/假,计算结果不正确
- If语句和大括号.有/没有不同的结果
- 检查结果时减少if语句
- 使用'if'语句和"<<"时的结果错误,'>>'运算符比较 3 个整数