Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Затруднения в программировании, Моменты вызывающие трудности 
V
    Опции темы
shinoby
Дата 6.3.2008, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Как осуществлять проверку введенных данных на C++ (т.е. было ли введено число или символ одного из алфавитов)?
PM MAIL   Вверх
bsa
Дата 6.3.2008, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



можно воспользоваться функциями типа isalpha() и isdigit()
PM   Вверх
shinoby
Дата 6.3.2008, 21:40 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Цитата(bsa @ 6.3.2008,  21:18)
можно воспользоваться функциями типа isalpha() и isdigit()

Функция isdigit(), она позволяет работать с любым пределом числовых величин (125, -64, 3 ...) или область ее ограничена (0 .. 9)?
Я сейчас рассматриваю вариант: atoi() и др. подобные ей.
PM MAIL   Вверх
t_gran
Дата 7.3.2008, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: нет
Всего: 37



shinobyisdigit - проверяет, а atoi (ansi to integer) непосредственно переводит.


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
xvr
Дата 7.3.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(shinoby @ 6.3.2008,  21:40)
Цитата(bsa @ 6.3.2008,  21:18)
можно воспользоваться функциями типа isalpha() и isdigit()

Функция isdigit(), она позволяет работать с любым пределом числовых величин (125, -64, 3 ...) или область ее ограничена (0 .. 9)?
Я сейчас рассматриваю вариант: atoi() и др. подобные ей.

Тогда тебе нужна strtoul
Код

char* end_ptr;
strtoul(my_input_string,&end_ptr,10);
if (*end_ptr) error("Not a number!");

PM MAIL   Вверх
shinoby
  Дата 7.3.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 6.3.2008

Репутация: нет
Всего: нет



Решение проблемы найдено, всем спасибо за обсуждение!!!
PM MAIL   Вверх
inside_pointer
Дата 9.3.2008, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: -1
Всего: 12



Русские буквы не будут работать, все эти функции для англичан  smile 
PM MAIL   Вверх
xvr
Дата 9.3.2008, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(inside_pointer @ 9.3.2008,  10:43)
Русские буквы не будут работать, все эти функции для англичан  smile

О! А нельзя ли популярно объяснить отличие русских ЦИФР от английских?
А что касается русских букв, то если используется не доисторический компилятор, и если аффтор не забыл установить локаль (setlocale( LC_ALL,"")) - то все русские буквы отлично распознаются, и именно как буквы smile
По крайней мере у меня работает - наверное я англичанин  smile 

Это сообщение отредактировал(а) xvr - 9.3.2008, 10:59
PM MAIL   Вверх
comcon1
Дата 10.3.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



xvr, ну зачем же переходить на Си??
вот путь для си++:
Код

string s("0.57");
try {
boost::lexical_cast<double>(s);
} catch(boost::bad_lexical_cast ex) {;}

причем эти функции подключаются чисто хедерами, поскольку являются обёртками над шаблонами iostream, библиотеки линковать не надо.

Это сообщение отредактировал(а) comcon1 - 10.3.2008, 13:04


--------------------
PM MAIL   Вверх
xvr
Дата 10.3.2008, 21:32 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(comcon1 @ 10.3.2008,  13:04)
xvr, ну зачем же переходить на Си??
вот путь для си++:
Код

string s("0.57");
try {
boost::lexical_cast<double>(s);
} catch(boost::bad_lexical_cast ex) {;}

причем эти функции подключаются чисто хедерами, поскольку являются обёртками над шаблонами iostream, библиотеки линковать не надо.

'Чисто хедер' boost сам является библиотекой, которую как минимум надо будет скачать и поставить. Я не думаю, что эти усилия стоят обеспечения 'концептуальной целостности'  С++ smile Я вообще не совсем понимаю желания некоторых програмистов полностью уйти от конструкций С в С++ программе. Любая конструкция (как на С так и на С++) имеет свои преимущества и недостатки, и применять надо ту, которая имеет в ДАННОМ контексте явные преимущества.

 smile А по поводу 'пути для С++' мне вспомнилась одна история из моих институтских лет:
Цитата

Идет семинар по физике, у доски студент решает домашнюю задачу. Решает весьма бойко, уже исписал пол-доски. Преподаватель (надо сказать у него был зверский темперамент) наблюдает за процессом решения со смешанными чуствами - решение идет практически один в один с тем, что написано у него самого, но обозначения в уравнениях выбранны другие. Чуствуется, что с увеличением количества писанины на доске преподавателю слежение за мыслью студента дается все сложнее и сложнее - он уже начинает ёрзать и подпрыгивать на месте. И вот кульминация - когда уже почти вся доска исписанна и задача практически решена у преподавателя кончается терпение, и он вскакивает с места и с фразой 'А давайте для ЭКОНОМИИ МЕЛА введем немного другие обозначения!' стирает с доски ВСЕ и быстро покрывает её таким же количеством формул (но в других обозначениях - его собственных). После чего отряхает руки и говорит потрясенному студенту - 'Ну, продолжайте'.

Предложение поставить boost и сделать проверку в 'правильных' С++ терминах вместо вызова strtod очень смахивает на такую вот 'экономию мела'. Такое предложение имеет смысл если и ТОЛЬКО если в проекте УЖЕ используется boost и исключения.
PM MAIL   Вверх
inside_pointer
Дата 11.3.2008, 04:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 9.3.2008

Репутация: -1
Всего: 12



Цитата(xvr)

Код

#include <locale.h>
setlocale( LC_ALL,"");

По крайней мере у меня работает - наверное я англичанин


Ок

Это сообщение отредактировал(а) inside_pointer - 11.3.2008, 04:18
PM MAIL   Вверх
t_gran
Дата 11.3.2008, 04:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: нет
Всего: 37



xvr, грамотно!!!


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
comcon1
Дата 11.3.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Ну, в общем, ты, конечно, прав. Если буста нет, то ставить канешн. геморой. Но, так сказать, на будущее, если программа будет в С++-стайле, то так как я написал, намного проще. 

Тем более, что можно самому задавать как одни типы переводятся в другие. 
И использовать для всех проверок написанный мною блок, а то как одни типы переводятся в другие, можно инкапсулировать в каком-нить модуле, чтобы их в глаза не видеть.

ЗЫ. Для юзания этого блока, вроде, буст можно просто скопировать и даже не собирать))


--------------------
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1068 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.