我正在为一个赋值编写代码,它希望我编写一个程序,要求用户输入他们想要输入的整数的数量,然后它接受每一个输入,同时测试这个值是最大值还是最小值。我的程序对除1以外的每个整数都运行得很好。当我输入int1时,即使输入的数字在技术上也是最小值,也只记录最大值,这是因为if语句导致循环在找到数字是max还是min时重复,在这种情况下,数字将始终是最大值,因此测试永远不会再次运行。我怎么才能解决这个问题呢?
#include <iostream>
using namespace std;
int main()
{
int input;
int tmp;
int counter = 1;
int max_num=0;
int min_num;
//prompt user for integer amount
cout << "How many integers would you like to enter? " << endl;
cin >> input;
cout<< "Please enter " << input << " integers." << endl;
tmp = input;
//loop for requested amount with a test for each input
while (counter <= tmp){
cin >> input;
//if smaller than previous number it is the minimum
if (input < min_num){
min_num = input;
counter++;
}
// if larger than previous number it becomes max number
else if (input > max_num){
max_num = input;
counter++;
}
//continue loop if number isn't bigger than max or smaller than min
else {
counter++;
}
}
//display the max and min
cout << "min: "<< min_num << endl;
cout << "max: " << max_num<< endl;;
return 0;
}发布于 2017-01-19 14:09:25
int max_num = -1;
int min_num = -1
while (counter <= tmp){
cin >> input;
//if smaller than previous number it is the minimum
if (input < min_num || min_num == -1){
min_num = input;
//counter++; => This operation is carried out in every case. Why not just do it once?
}
// if larger than previous number it becomes max number
// Else statement not needed here, What if user inputs only one number. It will be both max and min
if (input > max_num){
max_num = input;
//counter++;
}
//continue loop if number isn't bigger than max or smaller than min
counter++;
}发布于 2017-01-19 13:34:01
在语句if (input < min_num)中,min_num的值是未定义的,因为您没有为min_num赋值。您希望#include <climits>并将min_num初始化为INT_MAX。
发布于 2017-01-19 13:50:30
因为min_num是一个全局变量,所以这个问题是由于int min_num的默认值为0而出现的。将这几行代码添加到while循环之前,它就会工作得很好。
if(input >= 1)
cin >> min_num;
tmp = input-1;
if((input==1)&&(min_num > max_num)){
max_num = min_num;
min_num = 0;
}如果只添加了一个整数,则结果相反。所以我们需要一个错误检查。顺便说一句,代码并不好。
https://stackoverflow.com/questions/41734407
复制相似问题