简单的c ++ for循环意外输出

时间:2012-01-14 14:41:01

标签: c++ for-loop

我一直在编写一个程序,要求你输入两个整数,然后列出输入到输入的两个整数中较大的两个整数中的所有整数(包括)。我希望程序在输出中的最后一个整数之后放置一个句点,并且我已经找到了在不使用for循环的情况下执行此操作的方法,但我想了解为什么此代码不起作用(它只输出更大的整数之后的一段时间。)

#include <iostream>

int main()
{
std::cout << "Enter two integers, pressing <ENTER> after each integer." << std::endl;
int num1, num2, lower, upper;
std::cin >> num1 >> num2;
if (num1 > num2)
{
    upper = num1;
    lower = num2;
}
else
    if (num1 < num2)
    {
    upper = num2;
    lower = num1;
    }
    else
        if (num1 = num2)
        {
            upper = num1;
            lower = num1;
        }
std::cout << "All integers between " << lower << " and " << upper << " are:" << std::endl;
for (int val = lower; val <= upper; ++val)
{
    if (val = upper)
    {
        std::cout << val << "." << std::endl;
        ++val;
    }
    else
    {
        std::cout << val << std::endl;
        ++val;
    }
}
return 0;

}

如果输入的两个整数是1和5,为什么输出 5.代替1 2 3 4 5.

8 个答案:

答案 0 :(得分:3)

首先,您正在使用赋值运算符=,您应该使用比较运算符==。其次,由于for循环的第三个语句(val),for循环已经增加for (...; ...; ++val)。因此,无需在循环体内增加val

另外,考虑到您想要在一行中打印所有结果,您应该在每次迭代后输出一个空格而不是std::endl。请注意,最后一次迭代是一个例外,因为您需要输出句点而不是空格。在下面的固定版本中,我使用了循环体中的ternary operator来完成此任务。

std::cout << "Enter two integers, pressing <ENTER> after each integer." << std::endl;
int num1, num2, lower, upper;
std::cin >> num1 >> num2;
if (num1 >= num2)
{
    upper = num1;
    lower = num2;
}
else if (num1 < num2)
{
    upper = num2;
    lower = num1;
}

std::cout << "All integers between " << lower << " and " << upper << " are:" << std::endl;
for (int val = lower; val <= upper; ++val)
{
    std::cout << val << ((val == upper) ? "." : " ");
}

答案 1 :(得分:2)

问题是

if (val = upper)
{
    std::cout << val << "." << std::endl;
    ++val;
}

val = upper表示您将上限值影响到val。把2'='放在比较而不是影响。喜欢这个

if (val == upper)
{
    std::cout << val << "." << std::endl;
    ++val;
}

答案 2 :(得分:1)

由于

if(Val = upper)

将Val的值重新指定为高位。你的意思是

if(Val == upper)

无论如何,这可能是它。

答案 3 :(得分:0)

++ val必须仅存在于for循环声明级别,而不是if和else

for (int val = lower; val <= upper; ++val)
   std::cout << val << (val==upper ?  "." : " ") << std::endl; 

答案 4 :(得分:0)

你的程序中有两个错误,如delannoyk和Gillaume07所述。 =是c ++中的赋值运算符,而==是比较运算符。因此几乎总是if语句将具有比较运算符。其次在for循环语句中都有递增操作,if / else会在每次迭代后向计数器变量添加2。

答案 5 :(得分:0)

更容易做到你做的就是替换它:

for (int val = lower; val <= upper; ++val)
{
    if (val = upper)
    {
        std::cout << val << "." << std::endl;
        ++val;
    }
    else
    {
        std::cout << val << std::endl;
        ++val;
    }
}

用这个:

for (int val = lower; val <= upper; ++val)
{
     std::cout << val;

}
cout<<"."<<std::endl;

答案 6 :(得分:0)

其他人已就此代码的许多问题发表了评论。这是我的烦恼:您需要检查输入实际上是否正确!也就是说,从std::cin读取后,您需要检查这是否成功。输入非空格和非数字字符否则会留下随机垃圾,这些垃圾碰巧会按原样存储在您的变量中。从std::istream读取的规范方式如下:

if (std::cin >> num1 >> num2) {
    ...
}
else {
    possibly an report error here
}

答案 7 :(得分:0)

“=”用于将“upper”的值赋给“val”。当比较“val”和“upper”的值时,要使用的运算符应为“==”而不是“=”。因此,以下代码应为:

if (val == upper)
{
    std::cout << val << "." << std::endl;
    ++val;
}