Добавление пользовательского ввода в массив (C) - PullRequest
0 голосов
/ 27 января 2019

новичок в Си здесь.Извините за хромой вопрос.Я написал программу, которая берет от пользователя десять целых чисел, а затем добавляет их в массив.Это работает, но по какой-то причине он запрашивает у пользователя 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

обр [9] = 10:

обр [8] = 9:

обр [7] = 8:

обр [6]= 7:

обр [5] = 6:

обр [4] = 5:

обр [3] = 4:

обр [2] = 3:

обр [1] = 2:

обр [0] = 1:

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Что-то немного другое.Он изменяет размер при вводе новых чисел.

#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]);
       }
    }
}
0 голосов
/ 27 января 2019

Отключено на одну ошибку в вашем первом цикле, что может привести к повреждению стека:

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

output:

$ 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:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...