- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我编写了这个简单的程序来模拟抛硬币。它似乎工作正常,但是当“else”替换为“else if”时,程序不会产生预期的结果。
“Else”涵盖了第一个“IF”条件不满足且程序执行正常时的所有可能情况。当我尝试使用“else if (flip())”而不是“else”时,并非所有结果都显示出来。我希望从下面开始,只要函数“flip()”不返回 0,它就会返回 1,因此“else if (flip())”条件变为真,并且“heads”计数增加。但实际上发生了什么——“正面”计数至少减少了两倍(与使用“else”相比),即“else if (flip())”没有捕获所有返回值,当 flip() 返回 0 以外的任何值时.我明白,这里真的不需要使用“else if”,但如果有人能解释一下,为什么在这种情况下“else if”不会产生相同的结果,我将不胜感激。我错过了什么?非常感谢。
int flip ( void);
int main()
{
srand(time(NULL));
int tails = 0, heads = 0;
for ( int i = 1; i <= 100; i++){ // 100 tosses
if ( flip() == 0){
tails++; // increase tails count
printf("Tails ");
}
else{ // else if ( flip () ) - replacement for "else"
heads++; // increase heads count
printf("Heads ");
}
if ( i % 10 == 0){
printf("\n");
}
}
printf("\n\nTotal count is:\n%d for Heads\n%d for Tails\n", heads, tails);
return 0;
}
int flip ( void )
{
return rand()%2;
}
最佳答案
本质上,if语句的if (flip() == 0)
分支和else if (flip())
分支都会执行 flip()
分开。这意味着程序出现意外行为的那些边缘情况是由两个分支返回不同的数字引起的。
但是,如果您坚持要添加另一个分支,或者对于可能遇到同样问题的任何其他人,我能想到的最简单的解决方案是:
只需在 for 循环的开头定义一个变量来保存该迭代的 flip()
结果并针对该结果进行测试就足以满足您想要完成的任务。
具体来说,我会在循环开始前声明变量(int result;
),并在每次循环迭代开始时重新定义,以便每次都重新调用函数. (result = flip();
在有问题的 if 语句之前)
另一个解决方案是:
Switch 语句有点像修改过的 if/else 语句,除了它们在一个事物上测试许多不同的情况,例如
switch ( flip() ) // test against the result of flip()
{
// if it happens to be zero
case 0:
tails++;
printf("Tails ");
break;
// the break statement tells the program to stop this case
// if it happens to be one
case 1:
heads++;
printf("Heads ");
break;
}
虽然如果您决定放弃可变路由,它可能看起来过于复杂,但我认为实用程序 switch 语句可以添加到您的程序中,这非常值得。 (特别是如果有很多 if 分支)
TLDR: flip()
被调用了两次,请参阅标题下的解决方案和上面的解释。
关于如果从 rand() 接收到值,则 C/Else 与 Else 中的投币程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54161338/
这个问题在这里已经有了答案: Does an else if statement exist? (2 个答案) 关闭 4 年前。 相信大家在学习C的时候,都学过这样的语法: if (conditio
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
Java 11.6 在这个 BMI 计算器中,它将输入人的体重、高度并计算 BMI。 BMI 计算正确,但是在分类 BMI 方法中,程序会跳过 if 和 else if 检查,只打印出每次测试的“肥胖
我有以下代码,它根据 url 参数更改,然后隐藏表单上的选择选项。即 www.example.com?type=images 最终会有 20 多个不同的参数。我想知道比拥有大量 if else 更好的
在WikiPedia Binary Search 的文章中有一个名为Deferred detection of equality 的部分,其中介绍了二进制搜索的某种“优化”版本,如下所示: int b
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我在下面的代码中遇到错误。尝试了 if 和 elseif 的所有组合,但无法使其工作。 错误:未捕获的语法错误:意外的标记其他 if(disableAd == 0 && disableWeather
我是 Java 初学者,我正在做一些练习题来提高我的 Java 技能。 编写一个名为 season 的方法,该方法接受两个整数作为代表月份和日期的参数,并返回一个指示该月份和日期的季节的字符串。假设月
有没有可能在 JavaScript 中做这样的事情? if (name == 'foo') { exampleFunction('some_arg'); } else if (name ==
我有一段简单的代码来检查一些条件,我希望每个条件都产生一个唯一的输出,但如果没有满足条件,则产生另一个唯一的输出。 有什么方法可以创建仅在所有先前的 if 语句都失败时才触发的 else 吗?我知道下
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 8 年前。 Improv
我发现自己经常使用这样的模式: if (a > b) { foo(); } elseif (c > d) { bar(); } else { baz(); } 这里的要点是第二
Hive 使用 IF(条件,表达式,表达式),所以当我想做 if/else if/else if/else 时,我必须这样做: IF(a, 1, IF(b, 2, IF(c, 3, 4))) 有没有更
直到 if 和 else 具有共同的作用域: if (int x = foo()) { // .... } else if (int x = bar()) { // ... } else {
是否可以保证 if-else if-else if-else block 中的 ifs 会按照编写顺序进行测试。 我问这个是因为我经常尝试通过将最常见的情况放在首位来优化我的代码,我想知道编译器所做的
我有一个方法可以检查某些事情并根据这些检查返回一个 bool 值。它涉及一个单独的分支 If 部分,该部分按顺序检查大约 5 个条件。如果这些条件中的任何一个返回真,则该方法将返回真;。如果没有任何条
这个问题在这里已经有了答案: Yet Another Conditional Operator Nesting Question (2 个回答) Why is the conditional oper
有没有一种方法可以从一个事件运行多个 if else 语句?例如,尝试运行此命令,但它仅对类为“two”的元素执行第一个 if else,而不是对类为“三”的第二个元素执行。 $(".hamburge
我有一个类似这样的查询: SELECT SUM(`table`.points) AS total_points FROM table 这将返回类似这样的内容 | **points** |
我正在尝试对单选按钮组运行“存在检查”,以确定如果在组中选择了 2 个单选按钮中的 1 个(if 语句),如果选择了 2 个单选按钮中的另一个(否则 if语句)或者如果两者都没有选择(else 语句)
我是一名优秀的程序员,十分优秀!