В
void insert_table(int arr[], int length) {
int i;
for (i=0; i<SIZE; i=i+2){
scanf("%d", &arr[i]);
scanf("%d", &arr[i+1];
break;
}
у вас есть несколько проблем:
останов остановка вашего цикла после того, как вы (попытаетесь) ввести два значения, это, вероятно, не то, что вы хотели сделать
вы не проверяете результат scanf , поэтому вы не обнаруживаете ни EOF, ни неверный ввод
вы полагаете, РАЗМЕР четный, если нечетный, вы будете писать из обр. с неопределенным поведением
Возможно также длина - это количество записей в обр. , для которых не нужно использовать РАЗМЕР в insert_table
Чтобы вернуть количество записей, поможет звонящему в случае EOF / ошибка, если не все записи не установлены
Лучшее определение:
size_t insert_table(int arr[], size_t length) {
size_t i;
for (i = 0; i < length - 1; i += 2){
if ((scanf("%d", &arr[i]) != 1) ||
(scanf("%d", &arr[i+1]) != 1))
return i;
}
return i;
}
Если я добавлю это главное:
#define SIZE 100
int main()
{
int arr[SIZE];
size_t n = insert_table(arr, SIZE);
for (size_t i = 0; i != n; i += 2) {
printf("%d %d\n", arr[i], arr[i + 1]);
}
}
Компиляция и исполнение:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out
1 2 3 4 a
1 2
3 4
pi@raspberrypi:/tmp $ echo "1 2 3 4" | ./a.out
1 2
3 4
pi@raspberrypi:/tmp $ echo "1 2 3 4 5" | ./a.out
1 2
3 4
pi@raspberrypi:/tmp $