在C中向空数组多次添加相同的数字
这是一段将同一数字多次添加到空数组的代码,但当我打印现在的非空数组时,我会得到一些其他值:在C中向空数组多次添加相同的数字,c,function,sorting,C,Function,Sorting,这是一段将同一数字多次添加到空数组的代码,但当我打印现在的非空数组时,我会得到一些其他值: #include<stdio.h> #include<stdlib.h> void sort_0(int arr[100], int i, int n){ int final_array[100], c=0; // Count the number of '0' in the array for(i=0;i<n;i++){ if(
#include<stdio.h>
#include<stdlib.h>
void sort_0(int arr[100], int i, int n){
int final_array[100], c=0;
// Count the number of '0' in the array
for(i=0;i<n;i++){
if(arr[i] == 0){
c++;
}
}
// Add the c number of '0' to the final_array
for(i=0;i<c;i++){
scanf("%d",final_array[i]);
}
for(i=0;i<c;i++){
printf("%d ", final_array[i]);
}
}
int main(){
int arr[100], i, n;
// Entering the size of the array
scanf("%d", &n);
// Entering n elements into the array
for(i=0;i<n;i++){
scanf("%d", &arr[i]);
}
sort_0(arr,i,n);
return 0;
}
我没有得到任何输出,因为您不知道需要向
数组添加多少0
。\u final
我发现一个更好的解决方案是在获得第一个数组的0
数量后创建该数组。另外,我看不出为什么要将I
传递给函数,因为您可以在函数本身中简单地定义它
void sort_0(int arr[10], int n, int* c){
int i;
for(i=0;i<n;i++){
if(arr[i] == 0){
(*c)+= 1;
}
}
}
int main (void) {
int size;
printf("Enter array size: ");
scanf("%d", &size);
int arr[size];
for (int i=0;i<size;i++) {
scanf("%d",&arr[i]);
}
int c = 0;
sort_0(arr, size, &c);
printf("C is: %d\n",c);
int* final_array;
if ((final_array=malloc(c * sizeof(int)))==NULL) // should always check malloc errors
{
perror("malloc");
return -1;
}
for (int i=0;i<c;i++) {
final_array[i]= 0;
}
printf("{");
for (int i=0;i<c-1;i++) {
printf("%d,", final_array[i]);
}
printf("%d}\n",final_array[c-1]);
return 0;
}
void sort_0(int arr[10],int n,int*c){
int i;
对于(i=0;iscanf(“%d”,&arr[i]),请同时显示预期输出与实际输出(哪一个是{0,0,0,0}?)以及用于打印数组内容以及如何调用sort_0的代码。不相关,看起来我不应该是函数参数,而是函数中的一个局部变量。我已经编写了这部分内容,但忘了在这里添加它。它仍然不起作用。基本上,您希望创建一个数组,其中的0
数等于c
?我说得对吗?谢谢。这解决了我的问题。我仍然需要了解更多关于malloc的信息。malloc
允许您以友好方式分配内存。malloc(c*sizeof(int))
部分意味着您正在创建一个大小为c
的数组,其中包含元素typeint
。它相当于int数组[c]
如果您想更改整个malloc
部分。@MatteoPinna您的代码中有一个小错误,我已修复,请检查代码是否正确是的,谢谢。只是删除了太多的{
。
void sort_0(int arr[10], int n, int* c){
int i;
for(i=0;i<n;i++){
if(arr[i] == 0){
(*c)+= 1;
}
}
}
int main (void) {
int size;
printf("Enter array size: ");
scanf("%d", &size);
int arr[size];
for (int i=0;i<size;i++) {
scanf("%d",&arr[i]);
}
int c = 0;
sort_0(arr, size, &c);
printf("C is: %d\n",c);
int* final_array;
if ((final_array=malloc(c * sizeof(int)))==NULL) // should always check malloc errors
{
perror("malloc");
return -1;
}
for (int i=0;i<c;i++) {
final_array[i]= 0;
}
printf("{");
for (int i=0;i<c-1;i++) {
printf("%d,", final_array[i]);
}
printf("%d}\n",final_array[c-1]);
return 0;
}