将用户输入添加到数组(C)

将用户输入添加到数组(C),c,C,这里是C的初学者。对不起,我问了个蹩脚的问题。我正在编写一个程序,从用户那里获取十个整数,然后将它们添加到一个数组中。它可以工作,但由于某些原因,它会提示用户输入13次整数,并且在第二次提示中不包括“请输入整数:部分”。否则它仍然会创建数组并保存前十个数字。我就是不能让它停止13次求整数 int main () { FILE fp* int *arr = (int*) malloc (sizeof(int)*10); for(int i=0;i<=10;i++)

这里是C的初学者。对不起,我问了个蹩脚的问题。我正在编写一个程序,从用户那里获取十个整数,然后将它们添加到一个数组中。它可以工作,但由于某些原因,它会提示用户输入13次整数,并且在第二次提示中不包括“请输入整数:部分”。否则它仍然会创建数组并保存前十个数字。我就是不能让它停止13次求整数

int main () {

    FILE fp*
    int *arr = (int*) malloc (sizeof(int)*10);

    for(int i=0;i<=10;i++)
    {
            printf("Enter an integer:");
            scanf("%d", &arr[i]);
    }
    for (int i=0; i<11; i++)
    {
            printf("arr[%d] = %d: \n", 10-i-1, arr[10-i-1]);
    }
 return 0;
}
这是它当前的运行方式:

输入一个整数:1

输入一个整数:2

输入一个整数:3

输入一个整数:4

输入一个整数:5

输入一个整数:6

输入一个整数:7

输入一个整数:8

输入一个整数:9

输入一个整数:10

输入一个整数:11

输入一个整数:12

arr[9]=10:

arr[8]=9:

arr[7]=8:

arr[6]=7:

arr[5]=6:

arr[4]=5:

arr[3]=4:

arr[2]=3:

arr[1]=2:

arr[0]=1:


第一个循环中一个接一个的错误,可能导致堆栈损坏:

包括 包括 包括 定义数组长度10 int main argc,char*argv[]{ int*arr=int*malloc sizeofint*数组长度; forint i=0;i=0;i- { printfarr[%d]=%d:\n,i,arr[i]; } 返回0; } 输出:

$gcc-墙壁-o假人.c 美元/虚拟 输入一个0:1的整数 输入一个1:2的整数 输入一个2:3的整数 输入一个3:4的整数 输入一个4:5的整数 输入一个5:6的整数 输入一个6:7的整数 输入一个7:8的整数 输入一个8:9的整数 输入一个9:10的整数 arr[9]=10: arr[8]=9: arr[7]=8: arr[6]=7: arr[5]=6: arr[4]=5: arr[3]=4: arr[2]=3: arr[1]=2: arr[0]=1:
有点不同。当您输入新数字时,它会更改大小

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    size_t size;
    int array[];
}data_t;

data_t *addNumber(data_t **data, int number)
{
    data_t *tmp;
    size_t size = 0;

    if(*data)
    {
        size = (*data) -> size;
    }

    tmp = realloc(*data, (size + 1) * sizeof(int) + sizeof(**data));
    if(tmp)
    {
        *data = tmp;
        (*data) -> size = size + 1;
        (*data) -> array[size] = number;
    }
    return tmp;
}

int main()
{
    data_t *array = NULL;
    char str[500];

    while(fgets(str, 500, stdin) != NULL)
    {
        int number;

        if(sscanf(str, "%d", &number) != 1) break;
        if(!addNumber(&array, number))
        {
            printf("Error adding number\n");
        }
    }
    if(array)
    {
       for(size_t index = 0; index < array -> size; index ++)
       {
           printf("Index %zu Number: %d\n", index, array -> array[index]);
       }
    }
}

如果为10个整数指定malloc空间,则有效索引为0到9。所以for循环应该是i=0;i<10;如果你想向后遍历数组,那么它是为i=9;i>=0;i-还可以使第二个循环从int i=ARRAY_LENGTH-1的相反方向迭代;i>=0;i-{printfarr[%d]=%d:,i,arr[i];}dooohh,你当然是绝对正确的。更新了我的答案。