我已经在这2天工作了,找不到我的错误,程序运行但是在我输入3或4后它停止(等待)。任何人都可以帮助我,我的错误在哪儿?
该计划应该做到以下几点:
将询问用户他想输入多少个号码(3或4)。 将从用户输入3或4个整数值并保存在数组中。 该程序计算用户输入的零数。 然后程序将数组加倍到双倍大小,其中每个元素旁边都有一个副本。 最后打印出新阵列。
#include <stdio.h>
#include <stdlib.h>
static int cnt = 0;
/* Read <cnt> Integers into given array.
Return number of entered zeros */
int* readInts(int *arr) {
int i=0, *zeros = (int*)malloc(sizeof(int));
while(i <= cnt) {
scanf("%d", arr++);
if (arr[i++] == 0) *zeros++;
}
return zeros;
}
/* Create "double-sized" copy of array (duplicate each value)*/
void extend(int *arr, int *newarr) {
int i,j;
newarr = (int*) malloc(2 * cnt * sizeof(int*));
for (i=0,j=0; i <= cnt; i++) {
newarr[j++] = arr[i];
newarr[j++] = arr[i];
}
}
int main(void)
{
int arr[4], *zeros, i;
printf("How many integers (3 or 4)?\n");
scanf("%d", &cnt);
zeros = readInts(arr);
printf("You entered %d zero(s)!\n", *zeros);
int *newarr;
extend(arr, newarr);
for (i=0; i < cnt*2; i++) printf("%d ", newarr[i]);
printf("\n");
return 0;
}
答案 0 :(得分:1)
这是因为你应该使用while(i <= cnt)
while(i < cnt)
(两次)。
但在那之后,你会遇到分段错误
在为其分配值之前,您将newarr
传递给extend
在extend
内部为您分配一个值,但这不会在函数外部发生变化,因此您(很可能)会在printf("%d ", newarr[i]);
上遇到分段错误。
另外,您应该在int*
中将int
替换为malloc(2 * cnt * sizeof(int*));
。
但是为了避免分段错误,你有两个简单的选择(其中有更复杂的选项):
newarr
传递给extend
之前初始化int *newarr = (int*) malloc(2 * cnt * sizeof(int));
:void extend(int *arr, int *newarr)
int* extend(int *arr)
return newarr;
结尾处extend
和{{1}} {。}}。{/ li>
醇>