如何仅打印已排序数组的第二个元素?

时间:2019-06-04 06:30:14

标签: c sorting arraylist

这里我已经按升序对数组进行了排序。现在我只想打印排序后的数组的第二个元素。下面的代码显示未排序数组的第二个元素。我能做什么?

 #include <stdio.h>
 #include <string.h>
 #include <math.h>
 #include <stdlib.h>

 int main() {
 int n,b[n],i,j;

scanf("%d",&n);

for(i=0;i<n;i++)
    scanf("%d",&b[i]);
for(i=0;i<=n-2;i++)
{
    for(j=i+1;j<n;j++)
    {
        if(b[i]>b[j])
        {
           int a=b[i];
            b[i]=b[j];
            b[j]=a;

        }
    }

}

printf("%d",b[1]);

/* Enter your code here. Read input from STDIN. Print output to STDOUT */    
return 0;

}

2 个答案:

答案 0 :(得分:1)

问题是

int n,b[n],i,j;

当您声明b[n]时,n不确定,它可以具有任何垃圾值,因此在以后的阶段会导致UB。

从用户获得b后声明n

 int n,i,j;

 scanf("%d",&n);

 int b[n]; //or int *b = malloc(sizeof(int)*n); and later do free(b);

答案 1 :(得分:0)

您应将n定义为常量或使用malloc进行数组分配。

#include <stdio.h>
#include <string.h>
#include <math.h> 
#include <stdlib.h>
#define n 5 
int main() {
 int b[n],i,j;

 for(i=0;i<n;i++)
     scanf("%d",&b[i]);

 for(i=0;i<=n-2;i++) {
     for(j=i+1;j<n;j++)
     {
         if(b[i]>b[j])
         {
            int a=b[i];
             b[i]=b[j];
             b[j]=a;

         }
     }

 }

 printf("%d",b[1]);

 /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
return 0; 
} 

#include <stdio.h>
#include <string.h>
#include <math.h> 
#include <stdlib.h>
#include <malloc.h>
int main() {
 int n,i,j;
 scanf("%d",&n);

 int *b = malloc(sizeof(int)*n);

 for(i=0;i<n;i++)
     scanf("%d",&b[i]);

 for(i=0;i<=n-2;i++) {
     for(j=i+1;j<n;j++)
     {
         if(b[i]>b[j])
         {
            int a=b[i];
             b[i]=b[j];
             b[j]=a;

         }
     }

 }

 printf("%d",b[1]);

 free(b);
 /* Enter your code here. Read input from STDIN. Print output to STDOUT */ 
return 0; 
}