C程序:不使用数组更新最大和最小整数
我正在试验一个简单的C程序,它应该提示用户输入一个选定数量的正整数。在不使用数组的情况下,我在获取输入的整数集的最大值和最小值时遇到了一个问题 我目前使用的方法是,它将更新最后两个输入值中的最大值和最小值。如果有人不介意看看我做错了什么,我会很感激的 请看这里:C程序:不使用数组更新最大和最小整数,c,C,我正在试验一个简单的C程序,它应该提示用户输入一个选定数量的正整数。在不使用数组的情况下,我在获取输入的整数集的最大值和最小值时遇到了一个问题 我目前使用的方法是,它将更新最后两个输入值中的最大值和最小值。如果有人不介意看看我做错了什么,我会很感激的 请看这里: #include<stdio.h> int main() { int N ,i, value=0, min=0, max=0, sum=0, oldmin=0, Newmin=0, oldmax=0, Newmax=
#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;}
#包括
int main()
{
int N,i,value=0,min=0,max=0,sum=0,oldmin=0,Newmin=0,oldmax=0,Newmax=0;
双均值;
做{
printf(“要输入多少值?:”;
scanf(“%d”和“&N”);
printf(“\n”);
如果(N>0){
做{
如果(N>0){
//第一个值已更新
对于(i=1;iif)(oldmax一些备注:
- 您需要在相同的循环中设置最小/最大值,该循环中的值是
sum=sum+value;
,这就是关于最小/最大值的问题的原因
- 检查扫描结果以确保输入了数字
if(N>0){do{if(N>0){
so两次检查,但N从未改变
if(N>0){do{…}while(我认为你不需要oldmax,oldman/newmax,newmin,你可以用max和min来做,并且总是将它们与值进行比较。你也可以给我们输入数据和你得到的输出吗?请在发布前正确格式化代码。@bruno,哦,不,那是个意外!一切都很好。再次感谢!好的,你为什么要打印prompt到stderr
,但将错误消息发送到stdout
?这让我回头看。@TobySpeight是的,我也可以在stderr上发送错误消息以保持一致,问题是stdout上的fflush可能不起作用,但您没有编写fflush()
代码中的任何地方。如果您说stdout
不一定会在换行时自动刷新,那么这对于任何流都是正确的,正确的做法是调用fflush()
正确。@TobySpeight原始代码不打印以ny结尾的消息\n,我只是尊重这一点,就个人而言,我总是以a结尾以\n强制刷新;-)
if(oldmax<Newmax){
#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