C 我的程序崩溃了,我没有';我不明白为什么连第一次打印都没有
我的程序应该对用户输入的数字列表进行排序,但它甚至在到达第一个printf之前就崩溃了。我的编译器发出2个警告,但我没有看到问题。我还没有研究指针,所以我不想使用它们。以下是信息: 在函数“选择\排序”中:C 我的程序崩溃了,我没有';我不明白为什么连第一次打印都没有,c,function,C,Function,我的程序应该对用户输入的数字列表进行排序,但它甚至在到达第一个printf之前就崩溃了。我的编译器发出2个警告,但我没有看到问题。我还没有研究指针,所以我不想使用它们。以下是信息: 在函数“选择\排序”中: [Warning] passing arg 2 of `selection_sort' makes pointer from integer without a cast 在函数“main”中: [Warning] passing arg 2 of `selection_sort' ma
[Warning] passing arg 2 of `selection_sort' makes pointer from integer without a cast
在函数“main”中:
[Warning] passing arg 2 of `selection_sort' makes pointer from integer without a cast
#包括
整数选择\排序(整数n,整数v[n])
{
int高=v[0];
int i;
对于(i=0;i
您的程序正在使用可变长度数组,这是C99中添加的一项功能
但是,您可以根据未初始化的变量声明其大小。你认为那里会发生什么
在C语言中,函数中声明的变量没有设置为0。他们什么都不做。它们拾取堆栈上或寄存器中分配给它们的剩余值
我相信您的程序正在崩溃,因为intv[n]
中的n
是一个非常大的数字,并且v
试图使用太多内存
您可能可以通过将数组声明移动到
scanf
下面来解决此问题,该函数读取n
您需要将v
而不是v[n]
传递到函数选择排序v
是数组,v[n]
实际上是v
的越界元素
该行应为
selection\u sort(n,v)代码>如果您看到intv[n]
,你认为它是什么?继续@Gabe:注意,在这一点上,n没有值。@user3091996:你认为数组会有多大?scanf
是一个高级主题,只适合有10年以上C语言使用经验的人使用。为什么教育者坚持在指针之前教它,这是掌握语言必须理解的基本概念。您对指针及其与数组的关系的误解与您的困惑直接相关。@user3091996:如果您刚开始使用C编程,所有警告都是错误的。你还不知道何时忽略警告。当然C语言中的首字母需要首先——但是你不能做一个函数,并调用它来初始化<代码> N< /Cord>?@博士:C99没有改变,使声明在任何地方工作,比如C++吗?如果没有,你仍然可以使用一个函数,或者你可以用{和}创建一个新块,并在新块的顶部声明它。@ZanLynx不知道-我可能应该练习一些C99@doctorlove:我也是。我使用C++或C89,因为微软从来没有更新到C99和GCC默认到C89.嗨!这很有帮助,但现在它在所有阵列的插槽上存储了最高的值。我会尝试修复它,如果我无法修复,我会回来。
#include<stdio.h>
int selection_sort(int n, int v[n])
{
int high = v[0];
int i;
for(i = 0; i < n; i++)
high = high < v[i]? v[i] : high;
if(n - 1 == 0)
return;
v[n - 1] = high;
n -= 1;
selection_sort(n, v[n]);
}
int main(void)
{
int n, i;
int v[n];
printf("Enter how many numbers are to be sorted: ");
scanf("%d", &n);
printf("Enter numbers to be sorted: ");
for(i = 0; i < n; i++)
scanf("%d", &v[i]);
selection_sort(n, v[n]);
printf("In crescent order: ");
for(i = 0; i < n; i++)
printf("%d ", v[i]);
getch();
return 0;
}