用c语言实现冒泡排序程序
我只是在c中实现冒泡排序,但我必须面对从用户那里获取数组元素的问题,它没有正确获取,假设我输入数组大小5,之后我无法在数组中存储5个元素,我在main函数中编写了这段代码用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++){
#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-不客气。您可以单击空心复选标记,将此处的一个或另一个答案标记为已接受。