【问题标题】:Why isn't this C++ loop counting from 10 to -5? [closed]为什么这个 C++ 循环不是从 10 计数到 -5? [关闭]
【发布时间】:2012-12-05 05:06:18
【问题描述】:

好的,所以我正在学习 C++,其中一个挑战是制作一个从 10 倒数到 -5 的程序。它总是从 9 倒数到 1,并且显示完成!

请尽你所能帮助我,代码如下:

/*
*
*   Negative Example
*
*/
#include <iostream>
#include <string>
int main()
{
signed int i = 10;
    for(i <= 10 && i != (0 - 5); --i;) {
        using std::cout;
        cout << i << std::endl;
    }
    std::cout << "Done!" << std::endl;
}

输出: 9 8 7 6 5 4 3 2 1 完成!

【问题讨论】:

  • 查看 for 循环的各个部分。
  • 一个for循环必须包含三个三部分:for (initialization ; condition ; step)。在你的代码中,step是第二个,第三个是空的。
  • 什么是初始化,在循环中定义一个变量?
  • 是的。您只需输入分号即可跳过它。
  • 是的。但是,如果您在循环之前声明/初始化变量,您也可以将第一部分留空。在这种情况下,它变成for ( ; i &gt; -6 ; --i)

标签: c++ loops for-loop counting negative-number


【解决方案1】:

正如@jogojapan 建议的那样,你想重写

 for(i <= 10 && i != (0 - 5); --i;) {

作为

for(i = 10 ; i != (0 - 5); --i) {

最好是(虽然在功能上没有区别)

for(i = 10 ; i > - 5; --i) {

您也可以在循环体本身内定义i,如果在它之前或之后不需要它,就像这样

for(int i = 10 ; i > - 5; --i) {

编辑:如果您希望循环也与i=-5 一起运行,请将i&gt;-5 更改为i&gt;=-5

【讨论】:

  • for(i = 10 ; i &gt; - 5; --i) 不工作..
  • @AdamOrama 不工作是什么意思?是否缺少 -5 而您需要 -5?
【解决方案2】:

您的代码的问题是您放错了for 循环的部分。 实际上,循环从评估条件开始,然后每次通过递减i,并检查此i 是否不等于0。您的代码完成的事实是,如果 i == 1--i 将评估为 0 (false)。

您的代码应如下所示:

#include <iostream>
#include <string>
int main()
{
    // Move the variable initialization to the first part of the loop
    signed int i;

    // Note the difference in where the expressions are placed
    // relative to the semicolons.
    for(i = 10; i <= 10 && i != (0 - 5); --i) {
        using std::cout;
        cout << i << std::endl;
    }
    std::cout << "Done!" << std::endl;
}

【讨论】:

  • 谢谢!你就是答案!
  • @AdamOrama 没问题!顺便说一句,您可以写-5 之类的东西,而不是(0 - 5)。此外,写i &gt; -5 而不是i != -5 被认为是一种好习惯。
【解决方案3】:
for(i <= 10 && i != (0 - 5); --i;) {

你这些语句放错地方了,应该是:

for(;i <= 10 && i != (0 - 5); --i) { // or (0 - 5 - 1) if you want -5 as well

它从 9 开始并在 0 结束的原因是因为您使用--i 作为继续条件。

该条件有一个副作用,它会在循环体运行之前(即,从 9 开始)递减 i,并且在它达到 0 的那一刻它将为假。

为了更好地理解,请考虑for (x;y;z)

  • x 在第一次迭代之前执行一次
  • y每个循环迭代之前被评估,如果为真,则循环继续(假意味着循环退出)。
  • z 在每次循环迭代后执行。

当然,如果你想要一个从 10 到 -5(含)的循环,只需使用:

for (int i = 10; i >= -5; i--)

别再乱用狡猾的代码了 :-)

【讨论】:

    【解决方案4】:

    我认为你与中期不匹配。 foreach 循环作为括号内的 3 个术语,即使您不使用它们,您仍然需要 2 个分号。你的中间期目前是 --i ,只有当 i 为 0 时才会返回 false。

    此外,与 C 不同的是,C++ 中的 for 循环与 for 循环有不同的初始化部分,而在 C 中,您可以这样声明。 . .

    int i;
    for (i=0; i < 10; ++i)
    

    在 C++ 中,您可以在循环内声明变量。 . .

    for (int i=0; i < 10; ++i)
    

    【讨论】:

      猜你喜欢
      • 2014-02-01
      • 2016-07-27
      • 2013-04-19
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2021-08-17
      • 1970-01-01
      相关资源
      最近更新 更多