Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C程序:不使用数组更新最大和最小整数_C - Fatal编程技术网

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=

我正在试验一个简单的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;}
#包括
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;i
if)(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