Как распечатать только второй элемент отсортированного массива? - PullRequest
0 голосов
/ 04 июня 2019

Здесь я отсортировал массив в порядке возрастания. Теперь я хочу напечатать только второй элемент отсортированного массива. Ниже код печатает второй элемент несортированного массива. Что я могу сделать?

 #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 ]

1 голос
/ 04 июня 2019

Проблема

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);
0 голосов
/ 04 июня 2019

Вы должны определить 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; 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...