Как правильно и безопасно использовать sscanf

Прежде всего, другие вопросы об использовании sscanf не дают ответа на мой вопрос, потому что общий ответ - вообще не использовать sscanf и использовать fgets или getch , что в моем случае невозможно.

Проблема в том, что мой профессор Си хочет, чтобы я использовал scanf в программе. Это требование. Однако программа также должна обрабатывать весь неправильный ввод.

Программа должна прочитать массив целых чисел. Неважно, в каком формате целые числа для массива поставляются. Чтобы упростить задачу, программа может сначала прочитать размер массива, а затем целые числа в новой строке.

Программа должна обрабатывать такие входные данные (и соответствующим образом сообщать об ошибках):

  1. 999999999999999 ... 9 (числа больше целого)
  2. 12a3 (не считайте это целым числом 12)
  3. a ... z (strings)
  4. 11 aa 22 33 \ n все в одной строке (это можно решить, отбросив все после 11)
  5. входные данные больше, чем входной массив

Может быть больше неправильных случаев , это единственное, о чем я мог думать.

Если введен ошибочный ввод, программа должна попросить пользователя ввести еще раз, пока дается правильный ввод, но предыдущий правильный ввод должен быть сохранен (только неправильный ввод должен быть очищен от входного потока).

Все должно соответствовать стандарту C99.

8
задан Chris 27 February 2012 в 11:45
поделиться