我正在处理这个小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()=&gt;
/*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()没有显示所需的结果。 如果你能看一下这段代码并指导我,我会很高兴的。 万分感谢
答案 0 :(得分:3)
首先,不要为您创建的变量设置值。例如,所有int i, n, m, pos;
都有不确定的值,而不是您所期望的0。在使用之前不要忘记将它们设为值,以避免出现意外情况。
其次,请注意数组的索引。例如,arr[maxSize - i + 2]
,当i == 0
时,则索引将为maxSize + 2
,这是无效的位置,可能导致分段错误。