【问题标题】:What is wrong with my if , else if and else loop? [duplicate]我的 if 、 else if 和 else 循环有什么问题? [复制]
【发布时间】:2019-03-18 02:31:27
【问题描述】:

好的,所以我正在为我正在创建的编程编写一个简单的界面,我遇到了这个问题,无论如何它都会给我相同的响应。

  #include <iostream>
  using namespace std;

  int main()
 {
  char v;

  cout << "Binary or ASCII? "<<endl;

  cin >> v;

  if (v == 'B' || 'b')
  {
    cout << "Binary " << endl;

  }
  else if (v == 'A' || 'a')
  {
    cout << "ASCII " << endl;

  }
  else
  {
    cout << "ERROR: Invalid Option" << endl;

  }


   return 0;

  }

接口应该输出

 Binary

如果我输入 B 或 b

  ASCII

如果我输入 A 或 a

  ERROR: Invalid Option

其他一切

相反,我得到了

  Binary 

不管我输入什么

我的错误在哪里?我做错了什么?

【问题讨论】:

  • 术语狡辩:ifs 和 elses 不要循环。
  • if (v == 'B' || 'b') 更改为if (v == 'B' || v == 'b')
  • 顺便说一句,很好的问题。它包含我想在一个中看到的所有内容。
  • 两种测试的替代方案:将v 转换为lower(或upper)大小写,这样您只需测试一个大小写。例如:cin &gt;&gt; v; v = std::tolower(v); if (v == 'b')。如果您有许多选项需要测试,这将特别有用。
  • @Lisandro if() else 控制结构不是循环 BTW。我挣扎了 20 多年,你们从那里弄错了。循环是适用于重复代码块的控制结构,if() else if() else 将直接选择代码块一次

标签: c++ loops if-statement software-design


【解决方案1】:

让我们看看你的 if 会发生什么:

if (v == 'B' || 'b')

首先它检查是否v == 'B'。让我们假设它不是为了本演练。然后它会检查(false || 'b')。由于'b' 总是评估为真,这将是真的!

你可能想要:

if (v == 'B' || v == 'b')

【讨论】:

  • 每周两次重复回答这个问题的无数次重复对我来说似乎没什么用。
  • @πάνταῥεῖ 但它会造成伤害吗?在我看来,最坏的情况是我只帮助 this OP this 一次。但至少我帮助过某人。
  • 这会使网站或多或少地杂乱无章。您本可以帮助更好地提出副本并为 OP 的特定案例发表评论。
  • @πάνταῥεῖ 是的,但是你不能有效地进行种植。我不知道有多少次我因为花时间寻找复制品而错过了所有那些巨大的战利品,要么找到一个,要么因为我停下来寻找而输给了一些快速打字的枪子。 scohe001,现在的危害是问题有一个被接受的,赞成的答案,现在更难删除,并且可能会在相当长的一段时间内保持混乱。另外,这让我离成为下一个 Jon Skeet 的目标更远了,因为我不得不烧掉代表投票。
  • @user4581301 “但是你不能有效地进行rep-farm”从什么时候开始担心rep-farm可以为这个网站做出有用的贡献?当然,如果它进入 roomba 的方式可能会被认为是有害的,并且需要手动交互才能完全删除问题和答案。
猜你喜欢
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多