【发布时间】:2017-01-30 16:16:33
【问题描述】:
我正在编写这个小 C 程序来填充数组,从数组中插入和删除元素,最后打印该数组。
该程序由 main() 函数、addToArray() 函数、 remFromArray() 函数和 printArray() 函数。
这是我的主要方法: 提示用户输入一个正整数序列
• 对于用户输入的每个整数,调用 addToArray 函数将整数插入到数组中
• 调用 printArray 函数打印出数组的内容。
注意:不要提示用户输入整数个数;在用户输入负数之前,您必须接受输入
#include <stdio.h>
#define maxSize 100 //maxSize for array
int addToArray(int* arr, int size, int numToAdd);
int remFromArray(int* arr, int size, int numToGo);
void printArray(int* arr, int size);
int main (void){
int arr[maxSize];
int i, j;
printf("Enter a positive integer to add to an array\n");
while (i >= 0 ){
scanf("%d",&i);
if (i >= 0 ) {
addToArray(arr, maxSize, i);
printf("Enter another positive integer for array\n");
}
else{
printArray(arr, maxSize);
}
}
}
这些是我创建的其他函数:
addToArray() =>
/*find the correct index in the array where to insert the
new element, so array in ascending order
- make room for the new element by moving other elements
- store the new element at the correct index
- return the new size (number of elements) of the array */
int addToArray(int* arr, int size, int numToAdd){
int i, n, m, pos;
for (int i = 0; i < maxSize; i++)
{
if (numToAdd < arr[i])
{
pos = i;
break;
}
if (numToAdd > arr[n-1])
{
pos = maxSize;
break;
}
}
if (pos != maxSize)
{
m = maxSize - pos + 1 ;
for (int i = 0; i <= m; i++)
{
arr[maxSize - i + 2] = arr[maxSize - i + 1] ;
}
}
arr[pos] = numToAdd;
}
void printArray(int* arr, int size){
printf("Resultant array is\n");
for (int c = 0; c <= maxSize; c++){
printf("%d\n", arr[c]);
}
}
如您所见,我尝试编写 main()、addToArray()、printArray(),但由于某种原因它无法正常工作。我的 printArray() 没有显示所需的结果。 如果您可以查看此代码并指导我完成它,我会很高兴。 谢谢一百万
【问题讨论】:
-
你得到了什么?你期望得到什么?
-
您有 未定义的行为,因为您在使用其中的元素之前没有初始化数组。局部非静态变量,包括数组及其所有元素,如果未显式初始化,则具有 indeterminate 值。并且数组不是您使用未初始化的唯一变量。你也有未定义的行为,因为你超出了数组的范围。
-
您检查
i条件中i的值在 读取用户的值之前。这没有任何意义。 -
你可以在这里找到答案Turning my array into a function and making 2nd function有帮助。