将用户输入添加到阵列(C)

时间:2019-01-27 07:10:43

标签: c

这里是C语言的初学者。很抱歉这个la脚的问题。我正在编写一个程序,该程序从用户那里获取十个整数,然后将它们添加到数组中。它可以工作,但是由于某种原因,它会提示用户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:

2 个答案:

答案 0 :(得分:3)

在第一个循环中出现一个错误,可能导致堆栈损坏:

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

#define ARRAY_LENGTH 10

int main(int argc, char *argv[]) {
    int *arr = (int*) malloc (sizeof(int) * ARRAY_LENGTH);

    for(int i = 0; i < ARRAY_LENGTH; i++)
    {
        printf("Enter an integer %d:", i);
        scanf("%d", &arr[i]);
    }
    for (int i = ARRAY_LENGTH-1; i >= 0; i--)
    {
        printf("arr[%d] = %d: \n", i, arr[i]);
    }

    return(0);
}

输出:

$ gcc -Wall -o dummy dummy.c
$ ./dummy
Enter an integer 0:1
Enter an integer 1:2
Enter an integer 2:3
Enter an integer 3:4
Enter an integer 4:5
Enter an integer 5:6
Enter an integer 6:7
Enter an integer 7:8
Enter an integer 8:9
Enter an integer 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:

答案 1 :(得分:0)

有些不同。输入新数字时,它会更改大小。

#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]);
       }
    }
}