我一直在编写一个程序,要求你输入两个整数,然后列出输入到输入的两个整数中较大的两个整数中的所有整数(包括)。我希望程序在输出中的最后一个整数之后放置一个句点,并且我已经找到了在不使用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.
?
答案 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;
}