这段代码出了什么问题?问题出在哪里?我多次运行这段代码,但它显示代码正在运行,但我没有得到任何输出。你能告诉我哪里出了错吗?
#include <stdio.h>
int print_arr(int *arr, int n)
{ for(int i=0; i<=n; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
int insert_ele(int *arr_a, int *arr_b, int n, int Key)
{
int i,j;
for(i=0, j=0; i<n; i++, j++)
{
if(arr_a[i]>Key)
{
arr_b[j] = Key;
arr_b[j+1] = arr_a[i];
j++;
}
else
{
arr_b[j] = arr_a[i];
}
}
return 0;
}
int main()
{
//code
int arr_a[] = {12, 16, 20, 40, 50, 70};
int arr_b[10];
int Key = 26;
int n = sizeof(arr_a)/sizeof(arr_a[0]);
int indx = insert_ele(arr_a, arr_b, n, Key);
print_arr(arr, n);
return 0;
}
发布于 2021-04-11 13:05:29
对于初学者来说,这条语句中有一个拼写错误
print_arr(arr, n);
看起来你是说
print_arr( arr_b, n + 1 );
函数print_arr
的返回类型int
没有意义,也没有用。
函数的第一个参数应该具有限定符const
,因为传递的数组在函数中没有更改。
第二个参数的类型应该是size_t
。
这是for循环
for(int i=0; i<=n; i++)
如果函数的用户将在第二个参数n
中传递数组中的元素数量,则可以调用未定义的行为,因为在这种情况下,将尝试访问数组以外的内存。
同样,函数insert_ele
的返回类型int
没有任何意义,也是无用的。
第一个参数应该具有限定符const
,因为源数组不会在函数中更改。参数n
的类型应为size_t
。
该函数存在逻辑错误。
让我们假设变量Key
的值小于数组arr_a
的所有元素的值。
在这种情况下,索引j将递增两次,因此您将拥有
b[0] = Key; b[2] = Key; b[4] = Key; and so on.
如果将for循环拆分为两个for循环,那么函数的逻辑就会清晰得多。
程序可以看起来像下面这样。
#include <stdio.h>
size_t insert_ele( const int *a, size_t n, int *b, int key )
{
size_t i = 0;
for ( ; i < n && !( key < a[i] ); i++ )
{
b[i] = a[i];
}
b[i] = key;
for ( ; i < n; i++ )
{
b[i+1] = a[i];
}
return i;
}
FILE * print_arr( const int *a, size_t n, FILE *fp )
{
for ( size_t i = 0; i < n; i++)
{
fprintf( fp, "%d ", a[i] );
}
return fp;
}
int main(void)
{
int a[] = { 12, 16, 20, 40, 50, 70 };
const size_t N = sizeof( a ) / sizeof( *a );
int b[10];
int key = 26;
size_t m = insert_ele( a, N, b, key );
fputc( '\n', print_arr( b, m, stdout ) );
return 0;
}
程序输出为
12 16 20 26 40 50
https://stackoverflow.com/questions/67044793
复制相似问题