c - 多次将相同的数字添加到C中的空数组
问题描述
这是一段将相同数字多次添加到空数组的代码,但是当我打印现在非空数组时,我得到了一些其他值:
#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
进行了计数。然后将计数作为范围并0
添加到空数组final_array
计数中。
如果c = 5
,则final_array = {0,0,0,0,0}
预期输出:
arr = {0,1,4,3,0}
Output = 2
我没有得到任何输出
解决方案
0
由于您不知道需要添加多少,array_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;
}
推荐阅读
- zig - Zig:如何处理可选的错误联合类型?(例如,?std.process.NextError![:0]u8)
- javascript - Glob 导入返回 Parcel 中的空模块
- linter - 使用 webhint 时出现此错误的原因是什么:错误:找不到模块“@hint/utils-dom”?
- powershell - 如果必须将数据放入变量中,Powershell 函数将不起作用
- html - 在 div 或 box 容器上剪切 CSS 箭头
- javascript - 如何在jquery中使滚动页脚淡入?
- postgresql - 在 WHERE 子句中使用的所有列上创建索引是一种好习惯吗
- javascript - 如何从 Angular 组件检测 iframe 内表单的更改?
- php - 如何从单个谷歌帐户的多个谷歌日历中获取所有事件?
- python - 在 NanoPi NEO Air 上使用 RPi.GPIO_NP python-lib 的问题