这里我已经按升序对数组进行了排序。现在我只想打印排序后的数组的第二个元素。下面的代码显示未排序数组的第二个元素。我能做什么?
#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;
}
答案 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;
}