这应该是要求用户输入一个数字,如果该数字是正数,它将输出该数字并将一个数字加到count
并输出值count
(仅适用于最新输入值)。如果数字input
为负数,则只要求输入一个新数字,如果输入为0,则输出整个程序运行的计数,最小值,最大值,总和和平均值。
我已经大部分工作了,但是我在获取0场景的最小值时遇到了麻烦。我还收到int min
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main() {
int input = 7;
int count = 0;
int sumInput = 0;
int lastInupt = 0;
int max;
int min;
double avg;
while (input != 0) {
printf("enter a number\n");
scanf("%i", &input);
if (input > 0) {
count++;
printf("\ninput = %i", input);
printf("\ncount = %i\n", count);
/*input1 = input;*/
sumInput += input;
//lastInupt = input;
}
else if (input < 0) {
printf("\ninput = %i", input);
printf("\ncount = %i\n", count);
}
if (input > lastInupt) {
if (input > max) {
max = input;
/*input1 = input;*/
}
}
if (lastInupt > input) {
if (min > input){
min = input;
}
}
/*while (min > 0)
{
if (input < min) {
min = input1;
}
}*/
}
avg = (float)sumInput / (float)count;
printf("you have entered %i positive numbers..\n", count);
printf("Sum of inputs: %i", sumInput);
printf("\nThe maximum # is: %i", max);
printf("\nThe average is: %.2lf", avg);
printf("\nThe minimum # is: %i", min);
getchar();
getchar();
return 0;
}
代码必须保持与我的大学作业相同的通用格式。
答案 0 :(得分:1)
考虑同时初始化min和max并跳过lastInput变量。
int min = INT_MAX;
int max = INT_MIN;
.....
if (input > max)
max = input;
if (min > input)
min = input;
这应该确保始终对min和max进行初始化,在特殊情况下,第一个也是唯一的输入为0时,min和max都将获得值0。
因为您将min
初始化为MAX_INT
(int变量的最大可能值),所以第一次迭代min > input
将始终为true,并且min
将被更新。与max
和MIN_INT
如果在输入!= 0时仅应更新min和max,则将整个程序修改为
int main() {
int input = 7;
int count = 0;
int sumInput = 0;
int max = INT_MIN;
int min = INT_MAX;
double avg;
while (input != 0) {
printf("enter a number\n");
scanf("%i", &input);
if (input > 0) {
count++;
printf("\ninput = %i", input);
printf("\ncount = %i\n", count);
sumInput += input;
if (input > max ) max = input;
if (input < min ) min = input;
}
else if (input < 0) {
printf("\ninput = %i", input);
printf("\ncount = %i\n", count);
}
}
if(count==0) { // only 0 entered.
printf("inform user she didnt enter any positive numbers");
} else {
avg = (float)sumInput / (float)count;
printf("you have entered %i positive numbers..\n", count);
printf("Sum of inputs: %i", sumInput);
printf("\nThe maximum # is: %i", max);
printf("\nThe average is: %.2lf", avg);
printf("\nThe minimum # is: %i", min);
}
getchar();
getchar();
return 0;
}
答案 1 :(得分:0)
由于您的运行时错误已修复,因此我将解决min == 0的问题。
输入0时,如果语句input>0
和input < 0
的第两个if失败,则
但是它仍然会尝试最后两个if语句,当然0将小于当前的min,因此它将min设置为0(不正确)
您需要做的是将此内容放在else if(input < 0)
块之后
else{//input is 0
break;
}
因此当输入为0时,它将跳过检查输入是否低于最小值。因为无论如何您都希望在这一点上脱离循环。