我正在学习如何使用命令行参数来获取一个数字来决定数组中要组织的元素数量。随机数生成器应该获取用户的数字并生成许多随机数,然后使用冒泡排序对它们进行排序。 但数量不能少于2或大于10,000。 我一直收到Segmentation fault(核心转储)或者我可以输入任何数字(包括小于2或大于10,000的数字)并且它什么都不做。 我确定这是代码的第一部分是错误的,而不是子程序和定义,但我不知道如何解决它。
#include <stdio.h>
int randu(void);
void bubble(int *, int);
void swap(int *, int *);
int main(int argc, char *argv[]) {
int num1;
if (argc<2) {
printf("Number must be between 2 and 10000.\n");
printf("Enter a number to sort.\n");
scanf("%d", &num1);
}
if (argc>10000) {
printf("Number must be between 2 and 10000.\n");
printf("Enter a number to sort.\n");
scanf("%d", &num1);
}
sscanf(argv[1], "%d", &num1);
int main(void) {
int x[num1], i;
for(i=0;i<num1;i++)
x[i]=randu();
printf("Here are %d numbers\n", num1);
for (i=0;i<num1;i++)
printf("%d\n",x[i]);
}
}
int randu(void) {
static int seed=17;
seed=(25179*seed+13849)%65536;
return seed;
}
void bubble(int a[], int num1){
int i,j;
for (i=0;i<num1-1;i++)
for(j=num1-1;i<j;j--)
if(a[j-1]>a[j])
swap(&a[j-1],&a[j]);
}
void swap(int *a, int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
答案 0 :(得分:1)
您的代码存在许多问题
1)使用argc
是错误的。 argc
不是参数的值。它是参数的数量(包括程序名称)。
2)main
内有一个嵌套的main
。不要那样做。
3)你从不调用冒泡排序功能。添加它。
所以对你的程序进行轻微改写:
int randu(void);
void bubble(int *, int);
void swap(int *, int *);
int main(int argc, char *argv[]) {
int num1;
if ((argc < 2) ||
(sscanf(argv[1], "%d", &num1) != 1) ||
(num1 < 2) ||
(num1 > 10000)) {
printf("You must give a number in range 2-10.000 as input\n");
return 0;
}
int x[num1], i;
for(i=0;i<num1;i++) {
x[i]=randu();
}
printf("Here are %d numbers\n", num1);
for (i=0;i<num1;i++) {
printf("%d\n",x[i]);
}
// Call the sort function
bubble(x, num1);
printf("Here are %d numbers sorted\n", num1);
for (i=0;i<num1;i++) {
printf("%d\n",x[i]);
}
return 0;
}
int randu(void) {
static int seed=17;
seed=(25179*seed+13849)%65536;
return seed;
}
void bubble(int a[], int num1){
int i,j;
for (i=0;i<num1-1;i++)
for(j=num1-1;i<j;j--)
if(a[j-1]>a[j])
swap(&a[j-1],&a[j]);
}
void swap(int *a, int *b){
int temp;
temp=*a;
*a=*b;
*b=temp;
}
“prog 5”给出输出:
Here are 5 numbers
48676
38117
52608
17049
29820
Here are 5 numbers sorted
17049
29820
38117
48676
52608