【发布时间】:2015-08-18 13:44:38
【问题描述】:
我需要创建一个程序,允许用户输入一系列 以 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;
}
【问题讨论】:
-
在
cin >> value之后添加if ( !cin ) break;,否则如果他们输入奇怪的内容,您将进入无限循环。您可能还想从int largest = INT_MIN;开始,以便您的程序处理负数,并尝试处理他们输入的第一个值是哨兵的情况。 -
我按照您的第一个建议运行了程序并测试了如果我输入像 ! 这样的符号会发生什么。刚才说的最后一句话最大值是0。
-
尝试输入一个非零数字,按回车,然后在下次出现“请输入一个整数”时执行
!。 -
如果我输入8,那么!,最后会说 The maximum value is 0.
-
如果输入的第一个值是 0,程序将停止提示并显示最大值为 0,这是有道理的,因为 0 是标记值,旨在停止提示输入更多值的循环.