Задача:
Считать положительные вещественные числа в массив, вывести максимальный элемент и его номер.
Обработать ошибки ввода, т.е.
1)проверить, является ли введенный элемент числом;
2)проверить, является ли введенное число отрицательным.
Проблема:
В интернете вычитал способ выявления неверно введенного типа
if (!scanf(...))
Применил его в программе, хотя очень сомневаюсь в правильности данного метода (код ниже), однако при вводе любого символа, отличного от числового, функция scanf перестает "работать", следующие значения попросту не считываются, и бесконечно выводится "Ошибка ввода" . В чем проблема? Использую встроенный в Xcode компилятор. Код программы:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int N, num;
float max = 0;
num = 0;
printf("Введите количество элементов\n");
scanf("%d", &N);
float arr[N];
printf("Введите элементы последовательности\n");
for (int i = 0; i < N; i++)
{
if (!scanf("%f", &arr[i]))
{
printf("Ошибка ввода, повторите попытку\n");
i--;
continue;
}
if (arr[i] <= 0)
{
printf("Введено отлицательное значение, пожалуйста повторите ввод\n");
i--;
continue;
}
if (arr[i] > max)
{
max = arr[i];
num = i + 1;
}
}
printf("Максимальный элемент - %f, номер - %d\n", max, num);
return 0;
}
%sкак строку символов и преобразовывать функцией strtof (пожалуй, у нее больше возможностей для обработки ошибок) – avp Jul 04 '18 at 18:09