Александр Котляр
S:19:05:56 01.05
R:19:05:58 01.05
Не могу разобраться как мне организовать ввод массива по концевому признаку. В качестве концевого признака выступает любая ошибка, которая возникает при очередном вводе
значения с помощью функции scanf. Например, при вводе последовательности
1 2 3 a
должен быть сформирован массив из трёх элементов со значениями
𝐴[0] = 1, 𝐴[1] = 2, 𝐴[2] = 3.
В случае, если массив уже заполнен, а концевой признак ещё не наступил, ввод
элементов в массив прекращается. Такое «переполнение» не считать ошибкой: про грамма должна обработать полученный массив из десяти элементов, но функция
main в такой ситуации должна вернуть специальный код возврата, равный 100.
Упорядочить массив по возрастанию с помощью сортировки вставками (англ. Insertion Sort) и вывести на экран.
#include <stdio.h>
#define N 10
#define GOOD 0
#define ERROR_IO 1
#define ERROR_N 2
#define END_OF_INPUT 100
int input_an_array(int arr[], size_t n)
{
int value;
int i;
for (i = 0; i < n; i++)
{
if (scanf(*%d*, &value) != 1)
{
return END_OF_INPUT; // Обрываем ввод при любой ошибке ввода
}
arr[i] = value;
}
return GOOD;
}
void insertion_sort(int arr[], int n)
{
int i, j, key;
for (i = 1; i < n; i++)
{
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key)
{
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
void output_array(int arr[], size_t n)
{
for (int i = 0; i < n; i++)
{
printf(*%d *, arr[i]);
}
printf(*\n*);
}
int main()
{
int n;
int arr[N];
printf(*Enter array elements:\n*);
int input_result_array = input_an_array(arr, N);
if (input_result_array == END_OF_INPUT)
{
printf(*End of input. Sorted array:\n*);
insertion_sort(arr, N);
output_array(arr, N);
return END_OF_INPUT;
}
insertion_sort(arr, N);
printf(*Sorted array:\n*);
output_array(arr, N);
return 0;
}