用c语言实现冒泡排序程序

用c语言实现冒泡排序程序,c,C,我只是在c中实现冒泡排序,但我必须面对从用户那里获取数组元素的问题,它没有正确获取,假设我输入数组大小5,之后我无法在数组中存储5个元素,我在main函数中编写了这段代码 #include<conio.h> #include<stdio.h> void bubbleSort(int *arr, int size) { int temp, i, j; for(i = 1; i < size; i++){

我只是在c中实现冒泡排序,但我必须面对从用户那里获取数组元素的问题,它没有正确获取,假设我输入数组大小5,之后我无法在数组中存储5个元素,我在main函数中编写了这段代码

#include<conio.h>
#include<stdio.h>

void bubbleSort(int *arr, int size) {
          int temp, i, j;
          for(i = 1; i < size; i++){
                    for(j = 0; j <= size - i -1 ; j++){
                              if(*(arr+j) > *(arr+j+1)) {
                                   temp = *(arr+j);
                                   *(arr+j) = *(arr+j+1);
                                   *(arr+j+1)= temp;
                              }
                    }
          }
}
void display(int *p, int s) {

          for(int i = 0; i < s; i++){
                    printf("%d, ", *(p+i));
          }
}

int main() {
         int i, size, arr[size];
         printf("\n Enter Array Size ....");
         scanf("%d", &size);
         printf("\n Enter %d array values...", size);
          for(i = 0; i < size; i++){
                    scanf("%d", &arr[i]);
          }
          bubbleSort(arr, size);
          display(arr, size);
          return 0;
}
#包括
#包括
void bubbleSort(int*arr,int size){
内部温度,i,j;
对于(i=1;i
如果在打开警告的情况下运行编译器(例如在
-Wall
中),您将看到类似于以下内容的警告:

Build Status (so.prj - Debug)
 s0_15.c - 1 warning
  25, 27    warning: variable 'size' is uninitialized when used here 
      25, 21    note: initialize the variable 'size' to silence this warning
 Link so.exe
 "c:\Play\so.exe" successfully created.
Build succeeded. 
对此警告的最小修复方法是在使用变量之前简单地初始化变量
size

int main(void) {
         int i, size;
         printf("\n Enter Array Size ....");
         if(scanf("%d", &size) != 1) {/*handle error and leave*/ }
         if(size <= 0){/*handle error and leave*/ }
         int arr[size];//because this is a VLA, it cannot be 
                       //initialized upon declaration...
         memset(arr, 0, sizeof arr);//...so initialize here before using.
         ...  
int main(无效){
int i,大小;
printf(“\n输入数组大小…”);
如果(scanf(“%d”,&size)!=1){/*处理错误并离开*/}
如果(尺寸这是您的问题:

int i, size, arr[size];
当你声明一个数组时,它的大小必须在声明的时候就知道——它要么是一个常量表达式(比如
5
),要么是一个已经正确初始化或赋值的变量

此时,
size
尚未初始化或赋值,其值是不确定的。
arr
将被调整为该值的任何值,如果该值为0或负值,则行为将被取消定义。该大小在声明后不会更改,无论您稍后存储到
size
的值是什么

因此,您需要将
arr
的声明延迟到将值读入
size
之后:

int i, size;
printf("\n Enter Array Size ....");
scanf("%d", &size);

int arr[size];

int size,arr[size]
这不起作用,因为
size
需要在声明
array
之前有一个值。在
scanf
之后声明
array
。另外,始终检查
scanf
的返回值,以确保
size
值已成功设置。检查用户是否输入无效也是一个好主意id值,例如负数和非常大的数字。kaylum是正确的。您需要以最大大小分配数组或动态分配它(
malloc
)1.谢谢,现在开始工作了working@Imtiyaz-不客气。您可以单击空心复选标记,将此处的一个或另一个答案标记为已接受。