0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
|||||||||||
1 | |||||||||||
простая программа, проверяющая вводимое число21.11.2012, 01:36. Показов 1510. Ответов 18
Метки нет (Все метки)
Всем привет. Вот начал писать программку простую, которая просто проверяем введено ли число из заданного диапазона. Она работает, но есть вопросы, и хочу ее усовершенствовать.
почему при указании get_num(int& min_value, int& max_value) не хочет компилироваться а так же почему не работает такая запись для конкатенации cout << "enter number" + endl; (и как сделать чтоб заработало) а так же как сделать проверку что введено именно число а не строка? Добавлено через 16 минут и еще такой вопрос, вот в заголовочном файле среда разместила строки
0
|
21.11.2012, 01:36 | |
Ответы с готовыми решениями:
18
Максимальное вводимое число Максимальное вводимое число ограничение на вводимое число Программа проверяющая тесты |
1 / 1 / 1
Регистрация: 16.11.2012
Сообщений: 27
|
||||||||||||||||
21.11.2012, 01:49 | 2 | |||||||||||||||
насколько я понял вы случайно создали тестовый проект или что-то в этом духе. долго объяснять, в общем в ООП есть принцип раздельной компиляции так вот подобные директивы препроцессора помогают не включать уже включенные определения классов, структур и т.д. дабы не возникало ошибок компиляции. подрбнее об этом в первом томе книги "Философия С++" Брюса Эккеля я могу не прав быть, пусть меня поправят более опытные
0
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
|||||||||||
21.11.2012, 02:05 [ТС] | 3 | ||||||||||
Нашел вот хороший пример кода насчет ввода именно тех символов, которые нам нужны
Добавлено через 10 минут
0
|
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
21.11.2012, 02:06 | 4 |
Что за ужас?
Дабы не было краха и программа лишь говорила ата-та, считывайте в std::string, а далее используя isdigit для каждого её элемента (я бы оформил проверку в функцию с названием типа isInt), ну и если истина, то работаем с ней, предварительно конвертировав std::stoi( our_str ) (C++11), или по старинке atoi(ourStr.c_str() ).
0
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
||||||
21.11.2012, 02:12 [ТС] | 5 | |||||
ну меня устраивает и такой вариант. только вот компилироваться не хочет
и еще ругается на то что domain_error не определена... и можно вынести блок catch за пределы этой функции?
0
|
Неэпический
|
|
21.11.2012, 02:22 | 6 |
Вы что, после бэйзика переходите на C++? Что за сложение строк с манипулятором, да еще и с помощью +? И еще, если мне не изменяет память, при ошибке ввода, поток просто переходит в ошибочное состояние. Чтобы он выбрасывал исключение, нужно ему сначала указать на то, что должен это делать. Да и, имхо, лучше работать с cin.good(), а не с исключениями
0
|
1 / 1 / 1
Регистрация: 16.11.2012
Сообщений: 27
|
|
21.11.2012, 06:01 | 7 |
если вы считываете одно число, а пользователь через пробел вводит два, то в потоке остается мусор, который надо проигнорить. cin.rdbuf() возвращает указатель на этот самый буфер в котором остался мусор
->in_avail() дает нам количество символов в этом буфере. игнор имеет синтаксис (кол-во символов которые надо проигнорить (по умолчанию 1, символ на котором закончить, по умолчанию еоф) я все это почему: я вообще первокурсник. и мой препод когда проверяет лабу, он просматривает с полминутки мой код, а потом просит меня показать екзешник. я показываю. и он вводит в консоль что-то вроде "ЮРЮЛГАЛПИМЮ ЛПдшНЕЩ976Щ876Щ876%::*?:%*(?"№гшлжфдыэжды/+_"+_№" и если я должным образом не защитился от глупостей пользователя , моя прога просто вылетает. поэтому я проверяю абсолютно все варианты, а исключения я использую потому что начитался книжек про ООП
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
21.11.2012, 11:15 | 8 | |||||
Что это такое вы написали?
Потому что в main() у get_num() аргументы - числа. Нужно вызывать её с аргументами-переменными. Например:
0
|
1 / 1 / 1
Регистрация: 16.11.2012
Сообщений: 27
|
|
21.11.2012, 11:28 | 9 |
0
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
|
22.11.2012, 00:57 [ТС] | 10 |
так, а если символ * идет перед именем функции, например
char* example_func(int somenum, char* str_get) вот здесь мы принимаем указатель на str_get (а передается просто str_get), и возвращает функция указатель, так? bychevoz, не совсем понятно, так это значит в буфере остается только первый символ, или что? и объясните пожалуйста на примере как тут исключения сделать.
0
|
1 / 1 / 1
Регистрация: 16.11.2012
Сообщений: 27
|
||||||
22.11.2012, 05:57 | 12 | |||||
вот код одной из моих лабораторок по с++. нужно считать два параметра, сделать проверку введенных значений и если все хорошо, вычислить значение функции
многие могут сказать что тут слишком все усложнено, но тут показан оень важный аспект обработки исключений, и, вообще ООП если присмотреться, то можно увидеть что я генерирую исключения класса domain_error. но обработчик обрабатывает исключения класса exception. на самом деле я решил продемонстрировать самому себе работу виртуальных ункций. данном случае, тип исключения определяется на стадии выполнения, а не компилции. не могу точно все это обяснить, но это круто рассказано в книгах. это мало относится к теме, но мне просто нравится именно такой код многие предпочитают чтобы параметры скушала переменная string и далее они проанализировались, но мне приятнее делать так. на самом деле - исключения - тема очень глубокая и область ее применения гораздо больше чем просто проверка введенных значений. просто такова была тема лабораторки и мне это понрвилось
а насчет буфера, яркий пример: попробуйте скомпилировать это: cin>>x; cin.get(); }//конец функции main() программа законится сразу после того как вы нажмете энтер хотя, вы же вроде как написали cin.get() все потому что в буфере остался знак переноса строки , который считается cin.get()'ом выход который используют все одногруппники и рекомендуют нам наши учителя: писать два сингета а если пользователь введет не просто число, а через пробел еще какой-то бред? два сингета не спасут, так как в буфере, осталось еще неизвестное количество символов. тут на помощь приходит син.игнор(син.рдбуф->ин_эвэйл). хотя особо умные подключают <conio.h> и исользуют getch() прога весит на десяток килобайт больше изза подключенной библиотеки. мне кажется, ели подключать библиотеку - так использовать ее. если я подключи иострим и могу использовать только ее для решения задачи, то зачем мне библиотека "конио" (консоль инпут аутпут)?? я упрекал их в килобайтах, но они мыслят гигагерцами своеих 4хядерных процессоров. если бы они так же расходовали свои толстые кошельки, как свои процессоры и гигабайты памяяти я к тому что , а если писать большую программу? привычка подключать ненужные библиотеки просто ужасная.
0
|
1 / 1 / 1
Регистрация: 16.11.2012
Сообщений: 27
|
|
22.11.2012, 16:11 | 16 |
system для красоты, можно и без него)
0
|
0 / 0 / 0
Регистрация: 15.11.2012
Сообщений: 53
|
||||||
22.11.2012, 18:17 [ТС] | 19 | |||||
Ну так а чего вы игнорите буфер, может лучше просто очищать его ?
Добавлено через 5 минут и что думаете насчет cin.sync(); ? Добавлено через 7 минут вот так у меня сейчас программа выглядит
0
|
22.11.2012, 18:17 | |
22.11.2012, 18:17 | |
Помогаю со студенческими работами здесь
19
Максимальное вводимое число в Едит Разбить на группы вводимое число Как ограничить вводимое число? Программа, проверяющая вводимые числа Программа проверяющая четность числа Программа проверяющая на равенство деревья Т1 и Т2 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |