Sep 09, 2015 22:14
стояла задача преобразовать агрумент командной строки в число (язык С). Это часть первой тестовой задачи для студентов с основной идеей как правильно читать маны. Собственно, практически правильное решение изложено в качестве примера в самом конце мана. У студента разобраться и сделать правильно обычно занимает чуть больше пары. Проблема в правильной обработке всех возможных вариантов неправильного ввода.
Так вот, знающие язык С товарищи, как при помощи стандартной функции libc преобразовать строку в число и проверить все варианты неправильного ввода? (канонический вариант strtoxx не предлагать, это стандарт, обсуждать не интересно).
Должны распознаваться строки вида "-1" "-2" "1" "23" (пробелы, переводы строки и т.д. уже вырезал шелл, с этим парится не надо). Строки вида "aa" "1a" "1.0" "89249174934719347193" должны генерировать ошибку. Указатель не нулевой и строка не пуста по условию задачи.
Студент задачу решил корректно, не используя strtoxx функции. Одним вызовом альтернативной Posix функции + одной проверкой. Мне понравилось.
Слабо?