【问题标题】:How could I rewrite this selection structure with only if statements?我怎样才能用只有 if 语句来重写这个选择结构?
【发布时间】:2017-02-03 19:08:46
【问题描述】:

我要求创建一个程序,其中用户要输入一个整数值(1 到 4 之间),并根据输入生成特定的输出。

当输入的值不在 1 和 4 之间时,它还必须向用户提供错误。

我设法使用 if 和 else 语句来编写它,但是,我想知道是否可以只使用 if 语句来编写它。

【问题讨论】:

  • 添加代码sn-p而不是图片会更好。
  • if (x) { a } else { b } = if (x) { a } if (!x) { b } 虽然这不是一件非常有用的事情。此外,您之所以被否决,是因为发布屏幕截图而不是实际代码非常懒惰
  • 是的,您可以通过再次进行相同的检查来避免 else 声明。但它是低效的。或者,您可以在每个成功的语句中设置一个标志变量,以表明输入是好的。然后错误消息检查告诉。
  • 由于您的输入是一个范围,请检查if (input > 4 || input < 1){ printf("Error"); return 1;} 这将在必须测试特定输入之前结束程序。
  • 对不起,下次我会记住的! (我是堆栈溢出的新手,所以还没有完全弄清楚如何做到这一点)

标签: c control-structure


【解决方案1】:

有很多方法可以给这只猫剥皮!虽然不使用 else 语句是其中之一,但设置这样的约束似乎是不必要的,并且会降低代码的可读性,并且对于else 并没有真正做任何事情@ 相当于if ( ! resp_1 == 1 ||... ) 还请注意,您在 if 语句中有多余的检查 resp_1 是否等于 1 或 2 或 3 或 4,然后再单独检查并打印您的文本。

我的建议是使用开关,它易于阅读,并且可以快速实现

switch(resp_1){
  case(1): /*print*/ break;
  case(2): /*print*/ break;
  case(3): /*print*/ break;
  case(4): /*print*/ break;
  defualt: /*Print if not 1,2,3,4*/
}

【讨论】:

  • 是的,我会使用 switch,但是,问题特别要求使用 if 语句。无论如何,谢谢!
  • 我会争辩说,如果问题要求使用 if 语句,您应该使用它们,只需按照我的建议删除对 resp_1 值的初始检查,如果您不想要否则,使用 else 背后的想法来否定前面的 if 语句
【解决方案2】:

如果您必须只使用if 语句,那么只需将它们全部链接起来。

if        (resp_1 == 1) {
  // Print output for 1
} else if (resp_1 == 2) {
  // Print output for 2
} else if (resp_1 == 3) {
  // Print output for 3
} else if (resp_1 == 4) {
  // Print output for 4
} else {
  // Print error
}

if-else 语句(准确地)执行一个分支。这里的每个 else 分支都是另一个 if-else 语句。因此,只会执行一个分支;有效输入的分支之一,或最后一个 catch-all else 分支。

虽然可以使用一个标志并在没有单个 else 子句的情况下编写它,但 IMO 将远不太清楚你打算发生什么。编写代码时,请始终选择最能捕捉您意图的选项。两周后,如果代码需要澄清,首先向自己解释会更容易。

【讨论】:

  • 从未想过这个+1。
猜你喜欢
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 2017-05-25
  • 2021-07-16
  • 2015-10-02
  • 2022-10-24
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多