【问题标题】:add and remove elements from an array从数组中添加和删除元素
【发布时间】: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有帮助。

标签: c arrays function methods


【解决方案1】:

首先,您不会为您创建的变量设置值。例如,所有这些 int i, n, m, pos; 都有不确定的值,而不是您可能期望的 0。不要忘记在使用之前为它们指定一个值以避免意外。

其次,注意数组的索引。比如arr[maxSize - i + 2],当i == 0,那么索引就是maxSize + 2,这个位置无效,会导致分段错误。

【讨论】:

  • 几点:未初始化的局部非静态变量的值可能似乎是随机的,但要挑剔该值是不确定的。此外,未定义的行为(即越界时发生的情况)不会 导致分段错误或崩溃。
猜你喜欢
  • 2022-01-23
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多