Помогите: в си при вводе в массив трёхзначного(и больше) числа, он выводит некорректные данные

#include <stdio.h>
#include <stdlib.h>
printf("\n\nВведите размер массива(от 1 до 99): ");
char size[4];
fgets(size, 4, stdin);
int Amount = atoi(size);
char buffer[5], a[Amount];
int i = 0;
printf("\nВведите элементы массива:\n");
punkt4:
printf("a[%d]= ",i);
fgets(buffer,5,stdin);
a[i] = atoi(buffer);
i++;
if (i<Amount)
{ goto punkt4; }
printf("\nПолученные элементы массива в обратном порядке:\n");
i = Amount-1;
punkt3:
printf("a[%d]= %i\n",i,a[i]);
i--;
if (i>=0) {goto punkt3;}
}

Ответы (1 шт):

Автор решения: Harry
char buffer[5], a[Amount];

Т.е. в a[i] помещается только число не то от -128 до 127, не то от 0 до 255 — в зависимости о того, что такое char в данной системе.

Так что тут

a[i] = atoi(buffer);

просто происходит обрезка введенного значения...

Кстати, я бы делал без всех этих лишних goto:

printf("\n\nВведите размер массива(от 1 до 99): ");
int Amount;
scanf("%d",&Amount);
int a[Amount];
printf("\nВведите элементы массива:\n");
for(int i = 0; i < Amount; ++i)
{
    printf("a[%d]= ",i+1);
    scanf("%d",&a[i]);
}
printf("\nПолученные элементы массива в обратном порядке:\n");
for(int i = Amount; i > 0; --i)
    printf("a[%d]= %i\n",i,a[i-1]);

См. https://ideone.com/QXEp8h

→ Ссылка