我正在试验一个简单的 C 程序,该程序应提示用户输入选定数量的正整数。我在不使用数组的情况下获取输入的整数集的最大值和最小值时遇到问题。
我目前的方式是,它将更新最后两个输入值中的最大值和最小值。如果有人不介意看看我做错了什么,我将不胜感激。
看这里:
#include<stdio.h>
int main()
{
int N ,i, value=0, min=0, max=0, sum=0, oldmin=0, Newmin=0, oldmax=0, Newmax=0;
double mean;
do{
printf("How many values are to be entered?: ");
scanf("%d", &N);
printf("\n");
if (N>0){
do{
if (N>0){
// 1st value updated
for (i=1;i<=N;i++)
{
printf("Value %d:\n",i);
scanf("%d", &value);
sum = sum+value;
}
mean = (double)sum/(double)N;
//max
if(oldmax<Newmax){
max = Newmax;
}
else max = oldmax;
//min
if(oldmin>Newmin){
min = Newmin;
}
else min = oldmin;
}
else printf("INPUT ERROR!\n");
}
while(N<0);
printf("\nThe minimum value is %d, the maximum value is %d, and the average value is %.2lf.",min,max,mean);
}else printf("INPUT ERROR!\n");
} while(N<0);
return 0;}
最佳答案
一些评论:
- 您需要在执行的同一循环中设置 值 的最小/最大值
sum = sum+value;
,这就是你关于最小/最大问题的原因 - 检查 scanf 结果以确保输入了数字
-
if (N>0){ do{ if (N>0){
所以两次检查但N永远不会改变 -
if (N > 0) { do { ... } while (N<0); }
这毫无意义 - 嵌入的循环没有意义,只需要 1 个循环
消除问题的提案:
#include<stdio.h>
int main()
{
int N;
fprintf(stderr, "How many values are to be entered?: ");
if ((scanf("%d", &N) != 1) || (N <= 0))
printf("INPUT ERROR!\n");
else {
int i, min, max, sum = 0;
for (i = 0; i < N; ++i) {
int value;
fprintf(stderr, "Value %d:\n",i);
if (scanf("%d", &value) != 1) {
printf("INPUT ERROR!\n");
return -1;
}
sum = sum+value;
if (i == 0) {
min = max = value;
}
else {
if (value < min)
min = value;
if (value > max)
max = value;
}
}
printf("\nThe minimum value is %d, the maximum value is %d, and the average value is %.2lf\n",
min,max, (double)sum/(double)N);
}
return 0;
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -g -pedantic -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
How many values are to be entered?: 3
Value 0:
1
Value 1:
2
Value 2:
3
The minimum value is 1, the maximum value is 3, and the average value is 2.00
我使用fprintf用\n刷新消息,并将第一轮的第一个min和max值设置为不必使用 MIN_INT MAX_INT 可能没有为您定义
关于C程序: Updating max and min integers without using arrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54751906/