使用条件语句在哨兵结束循环后显示最大值
Show largest value after sentinel ends loop using a conditional statement
我需要创建一个程序,允许用户输入一系列
以 0 作为标记的整数。最后会显示最大的整数。
我最初在 if 语句下有语句 largest = value
,但将其更改为条件语句,这对我来说更有意义,因为我以前的方式只是在输入标记之前给了我最后一个值.它似乎给了我“正确”的输出,但我用条件语句设置它的方式是否正确?如果没有,我该如何解决?
原始输出
This program finds the largest integer in a list.
Enter 0 to signal the end of the input.
Please enter an integer: 21
Please enter an integer: 15
Please enter an integer: 9
Please enter an integer: 6
Please enter an integer: 3
Please enter an integer: 0
The largest value is 3.
Press any key to continue . . .
当前输出
This program finds the largest integer in a list.
Enter 0 to signal the end of the input.
Please enter an integer: 15
Please enter an integer: 200
Please enter an integer: 3
Please enter an integer: 5
Please enter an integer: 21
Please enter an integer: 0
The largest value is 200.
Press any key to continue . . .
源代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
const int SENTINEL = 0;
/* Main Program */
int main()
{
cout << "This program finds the largest integer in a list.";
cout << "\nEnter " << SENTINEL << " to signal the end of the input." << endl;
int largest = SENTINEL;
while (true)
{
int value;
cout << "\nPlease enter an integer: ";
cin >> value;
if (value == SENTINEL)
break;
largest = (value > largest) ? value : largest;
}
cout << "\nThe largest value is " << largest << "." << endl;
cout << endl;
system("PAUSE");
return 0;
}
我认为你的做法是正确的。
但是,您可以简单地替换:
largest = (value > largest) ? value : largest;
通过等效的 if
条件语句:
if (value > largest){
largest = value;
}
此外,请注意,只需替换您的声明:
int largest = SENTINEL;
来自
int largest = INT_MIN;
其中 INT_MIN
是可能的最小整数。
在线评论中的一些小建议,无论您可以从中提取什么教育价值...
#include <iostream>
const int SENTINEL = 0;
int main()
{
// can continue input across lines, and rarely need to use endl...
// (any input attempt from cin will flush cout first)
std::cout << "This program finds the largest integer in a list.\n"
"Enter " << SENTINEL << " to signal the end of the input.\n";
int num_inputs = 0;
int largest;
// before, shouldn't have used sentinel here - if input all negative
// largest would be 0 in error...
// now won't use unless we see actual inputs so no need to init
int value;
while (std::cout << "\nPlease enter an integer: " &&
std::cin >> value) // use cin so unparsable input breaks
{
if (value == SENTINEL)
break;
if (++num_inputs == 1)
largest = value;
else if (value > largest)
largest = value;
}
if (num_inputs > 0)
std::cout << "\nThe largest value is " << largest << ".\n\n";
system("PAUSE"); // for Windoze
}
使用 num_inputs
可以避免在没有非哨兵输入时输出一条声称知道最大值的消息。
另一种维护 largest
的方法是:
else
largest = std::max(value, largest);
关于...
while (std::cout << "\nPlease enter an integer: " &&
std::cin >> value)
...这确保无法解析为整数的输入会导致循环终止(因为 std::cin
在 eof
、fail
[=37= 中设置] bad
状态,其中任何一个都会导致 std::istream::operator bool() const
运算符在布尔计算上下文中 return false
。将提示 ("Please enter...") 写入的技巧while 条件只是在第一次输入尝试之前完成,然后每次通过循环重做,而不必在 while
循环结束时重复相同的 std::cout << ...
源代码。它稍微更正确同样,由于 std::cout
的输出可能会失败,因此终止循环并不是对此的不合理反应,尽管人们很少费心去测试 cout
或 cerr
输出操作的成功。
我需要创建一个程序,允许用户输入一系列 以 0 作为标记的整数。最后会显示最大的整数。
我最初在 if 语句下有语句 largest = value
,但将其更改为条件语句,这对我来说更有意义,因为我以前的方式只是在输入标记之前给了我最后一个值.它似乎给了我“正确”的输出,但我用条件语句设置它的方式是否正确?如果没有,我该如何解决?
原始输出
This program finds the largest integer in a list.
Enter 0 to signal the end of the input.
Please enter an integer: 21
Please enter an integer: 15
Please enter an integer: 9
Please enter an integer: 6
Please enter an integer: 3
Please enter an integer: 0
The largest value is 3.
Press any key to continue . . .
当前输出
This program finds the largest integer in a list.
Enter 0 to signal the end of the input.
Please enter an integer: 15
Please enter an integer: 200
Please enter an integer: 3
Please enter an integer: 5
Please enter an integer: 21
Please enter an integer: 0
The largest value is 200.
Press any key to continue . . .
源代码:
#include "stdafx.h"
#include <iostream>
using namespace std;
const int SENTINEL = 0;
/* Main Program */
int main()
{
cout << "This program finds the largest integer in a list.";
cout << "\nEnter " << SENTINEL << " to signal the end of the input." << endl;
int largest = SENTINEL;
while (true)
{
int value;
cout << "\nPlease enter an integer: ";
cin >> value;
if (value == SENTINEL)
break;
largest = (value > largest) ? value : largest;
}
cout << "\nThe largest value is " << largest << "." << endl;
cout << endl;
system("PAUSE");
return 0;
}
我认为你的做法是正确的。
但是,您可以简单地替换:
largest = (value > largest) ? value : largest;
通过等效的 if
条件语句:
if (value > largest){
largest = value;
}
此外,请注意,只需替换您的声明:
int largest = SENTINEL;
来自
int largest = INT_MIN;
其中 INT_MIN
是可能的最小整数。
在线评论中的一些小建议,无论您可以从中提取什么教育价值...
#include <iostream>
const int SENTINEL = 0;
int main()
{
// can continue input across lines, and rarely need to use endl...
// (any input attempt from cin will flush cout first)
std::cout << "This program finds the largest integer in a list.\n"
"Enter " << SENTINEL << " to signal the end of the input.\n";
int num_inputs = 0;
int largest;
// before, shouldn't have used sentinel here - if input all negative
// largest would be 0 in error...
// now won't use unless we see actual inputs so no need to init
int value;
while (std::cout << "\nPlease enter an integer: " &&
std::cin >> value) // use cin so unparsable input breaks
{
if (value == SENTINEL)
break;
if (++num_inputs == 1)
largest = value;
else if (value > largest)
largest = value;
}
if (num_inputs > 0)
std::cout << "\nThe largest value is " << largest << ".\n\n";
system("PAUSE"); // for Windoze
}
使用 num_inputs
可以避免在没有非哨兵输入时输出一条声称知道最大值的消息。
另一种维护 largest
的方法是:
else
largest = std::max(value, largest);
关于...
while (std::cout << "\nPlease enter an integer: " &&
std::cin >> value)
...这确保无法解析为整数的输入会导致循环终止(因为 std::cin
在 eof
、fail
[=37= 中设置] bad
状态,其中任何一个都会导致 std::istream::operator bool() const
运算符在布尔计算上下文中 return false
。将提示 ("Please enter...") 写入的技巧while 条件只是在第一次输入尝试之前完成,然后每次通过循环重做,而不必在 while
循环结束时重复相同的 std::cout << ...
源代码。它稍微更正确同样,由于 std::cout
的输出可能会失败,因此终止循环并不是对此的不合理反应,尽管人们很少费心去测试 cout
或 cerr
输出操作的成功。