Как сделать проверку на число в си
Здравствуйте. У меня вопрос. Как можно организовать в языке Си проверку на ввод числа т.е. если мы введем букву или иные символы вместо числа то должно выдать ошибку.
Заранее спасибо.
| Snifer1994 |
| Посмотреть профиль |
| Найти ещё сообщения от Snifer1994 |
Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792
Переведи строку в число. Если функция перевода вернет ошибку значит нужно уведомить пользователя. Функций перевода в число множество — выбирай какая по вкусу из хелпа своего компилятора..
I’m learning to live.
Регистрация: 14.08.2012
Сообщений: 3
Не знаю по поводу перевода строки в число. А нету способа полегче?
Вот нашел на просторах интернета этот способ но не могу понять как он работает?
Сможет кто нибудь объяснить принцип его работы.
void main()
| Snifer1994 |
| Посмотреть профиль |
| Найти ещё сообщения от Snifer1994 |
Белик Виталий 🙂
Регистрация: 23.07.2007
Сообщений: 57,792
Эта функция умеет возвращать в качестве результата код ошибки, если введенное нельзя сравнить с шаблоном формата. Короче если введенное не является числом по формату %d (т.е. не целое) то выдать ошибку.
Можно и так, если scanf-ом не брезгуешь.
I’m learning to live.
Проверка на ввод только чисел С++
Как сделать проверку для 3-х переменных на то, что бы это был ввод только чисел? Code:
// hms_to_secs.cpp // convert hour, minuts, second to seconds // input for example: 23 59 59 // output: 86399 #include using std::cout; using std::cin; using std::endl; ///////////////////////////////////////////////////////////////////////////////////////////////// long hms_to_secs(int&, int&, int&); // prototype ///////////////////////////////////////////////////////////////////////////////////////////////// int main() < int h, m, s; // hour, minute, second while (true) < cout > h >> m >> s; for (int x = 0; x < 50; ++x) cout return false; > ////////////////////////////////////////////////////////////////////////////////////////////////// long hms_to_secs(int& hours, int& minuts, int& second)
Отслеживать
12.5k 2 2 золотых знака 19 19 серебряных знаков 44 44 бронзовых знака
задан 27 авг 2019 в 17:45
CatException CatException
679 1 1 золотой знак 6 6 серебряных знаков 20 20 бронзовых знаков
Как проверить ввод на число в С?
nirvimel: значит scanf должен считать integer, а если я введу текст например, он должен дать возможность повтороного ввода. Прошу прощения за очень непонятный вопрос.
Решения вопроса 1

Системный программист ^_^
что вы подразумеваете под «зацикливается»?
первый вариант действительно после неправильного ввода начинает бесконечно писать «number», но второй вариант вполне адекватно спрашивает number, пока не получит корректный номер. если вам нужно спросить только один раз, уберите while, а условие var != 1 используйте далее для определения корректности ввода (при вводе число, var будет равен 1)
Ответ написан более трёх лет назад
MajorTom69 @MajorTom69 Автор вопроса

я прекрасно понимаю идею кода, я его писал и про var = 1 при числе тоже понимаю
MajorTom69 @MajorTom69 Автор вопроса
вы запускали второй вариант?

MajorTom69: запускал, у меня всё ок, ждёт пользовательского ввода. Компилирую в MSVS 2008.
На Linux и в других компиляторах это может не работать, поэтому попробуйте заменить fflush на свой:
void my_flush() < int c; while ((c = getchar()) != EOF) < >>
MajorTom69 @MajorTom69 Автор вопроса
15432: спасибо, правда я его попробовал и он не останавливался, ну тоесть я ввел букву или число и дальше ничего не происходило, так что я немного изменил код, видать из-за «\n» проблема была
#include void my_flush(void) < int c; do < c = getchar(); >while (c != EOF && c != '\n'); >
но вопрос появился, я правильно понимаю, что getchar передавая что-то из потока ввода очищает этот поток ввода автоматически?

MajorTom69: каждый getchar «забирает» из входящего потока букву. scanf же забирает символы только если они подходят под параметры парсинга, вот и зацикливается код (scanf бесконечно пытается распарсить ввод, но там не цифра).
странно, что не останавливается, он должен считать всё до конца потока, тем самым очистив его. EOF эквивалентен числу -1, поэтому ‘c’ должен быть int.
Как сделать проверку целого числа на языке Си?
— — — —
Нужно проверить число при вводе на то, чтобы оно было положительным и целым.
Вот как у меня получилась первая часть, а как проверить его целое оно или нет, я незнаю:
if((x>0&&. ))
Подскажите пожалуйста, принимается любая помощь. Заранее спасибо!
Лучший ответ
if (x > 0 && !floor(x))
<
// Код
>
Остальные ответы
При вводе обычно набирают символы. Поэтому строку надо проверить на наличие ненулевых цифр после десятичной точки.
Проверку, с переводом в бинарный формат, можно иногда обмануть, так целые десятичные числа не всегда круглые для двоичных!
Похожие вопросы
Ваш браузер устарел
Мы постоянно добавляем новый функционал в основной интерфейс проекта. К сожалению, старые браузеры не в состоянии качественно работать с современными программными продуктами. Для корректной работы используйте последние версии браузеров Chrome, Mozilla Firefox, Opera, Microsoft Edge или установите браузер Atom.