С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
Tiphon
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 7
#1

Как проверить что в переменной char хранится число? - C++

28.01.2014, 16:55. Просмотров 3148. Ответов 40
Метки нет (Все метки)

Т.е. что там использованы только числа от 0 до 9 и нет букв?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 16:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как проверить что в переменной char хранится число? (C++):

Возможно ли вызвать функцию, имя которой хранится в переменной типа char* ? - C++
Или возможно ли создать указатель на функцию по имени в переменной. Извиняюсь за неконкретный вопрос, просто ещё не полностью продумал...

Определить, целое число хранится в переменной, или дробное - C++
помогите ребята.я только учу сам с++.наработал свой проект все вроде пока понимаю но мне ужен маленький кусочек алгоритма.смотрите.скажем...

Как проверить, что находится в переменной? - C++
Недавно возник вопрос...как проверить через инструкцию if какое значение находится в переменой, числовое или текстовое?? допустим...

Как проверить что к переменной прибавилось более чем X - C++
Здравствуйте Уважаемые Форумчане! Сегодня у меня возникла следующая проблема , об которой я даже не знаю как загуглить можно)) ...

Как проверить, что число делится нацело - C++
как записать такое условие в код if(если число делится нацело) { }

Как проверить, что пользователь ввел число в переменную string? - C++
Скажите пожалуйста как проверить что пользователь ввел число в переменную string? И как его потом конвертировать в int ?

40
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 17:42 #16
0x10, ну gromo уже осознал свою ошибку и испугался, даже след его простыл. А вы не знаете почему мое решение хуже чем решение gromo?
0
0x10
28.01.2014, 17:47
  #17

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
А вы не знаете почему мое решение хуже чем решение gromo?
Знаю. У меня есть аргументы, которые отлично выражаются парой матерных фраз. По этой причине привести их тут я не могу.

0
gunslinger
случайный прохожий
1146 / 764 / 197
Регистрация: 20.07.2013
Сообщений: 2,137
28.01.2014, 17:50 #18
Индийский код:
C++
1
isdigit(int(c-'0'));
или
C++
1
2
3
int d = int(c-'0');
if (d >= 0 && d <= 9)
// я люблю Индию
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 17:51 #19
Цитата Сообщение от 0x10 Посмотреть сообщение

Не по теме:


Знаю. У меня есть аргументы, которые отлично выражаются парой матерных фраз. По этой причине привести их тут я не могу.

Когда мой код обзывают говнокодом и не обьясняют почему так называют у меня складывается о таких людях очень нехорошее мнение, которое я не могу здесь озвучить, потому что я не хочу нарушать правила.
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.01.2014, 18:15 #20
Цитата Сообщение от programina Посмотреть сообщение
И чем это лучше моего решения?
Тем, что в этом решении две строки.
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 18:17 #21
Цитата Сообщение от alsav22 Посмотреть сообщение
Тем, что в этом решении две строки.
Это ни о чем не говорит. Я тоже могу свернуть код в функцию и будет две строки.
0
Тамика
Котовчанин
917 / 461 / 145
Регистрация: 16.02.2010
Сообщений: 3,229
Записей в блоге: 27
28.01.2014, 18:19 #22
А как же быстродействие? Насколько знаю, код programina более "строчный", но работать будет быстрее.
0
0x10
2486 / 1661 / 249
Регистрация: 24.11.2012
Сообщений: 4,136
28.01.2014, 18:20 #23
Цитата Сообщение от alsav22 Посмотреть сообщение
Тем, что в этом решении две строки
Спокойно. Она просто сейчас подведет под то, что мы тут все мыслим шаблонами и не в состоянии принять тот факт, что ее решение рабочее. Какой смысл вестись на провокации.
0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 18:36 #24
Цитата Сообщение от 0x10
Вам какой из эвристических принципов напомнить?
Что не нужно изобретать велосипед, когда есть решение конкретной задачи? Что при ручном перечислении элементов конечного множества код потенциально опасен в плане возможных опечаток? В противном случае, напомнить о таблице ascii и что числа в ней располагаются последовательно, а потому можно обойтись более компактной конструкцией?

Не по теме:

А почему вас так волнует какие принципы я применяю для решения задачи? Может мне переменные теперь обзывать в соответствии с вашими пожеланиями?


Немного успокою вас, ошибки в моем коде нет, и по функциональности он ничем не отличается от isdigit().
Поэтому ничего более вразумительного, чем два ваших матерных слова, я так и не услышала.
0
0x10
28.01.2014, 18:38
  #25

Не по теме:

Цитата Сообщение от programina Посмотреть сообщение
Может мне переменные теперь обзывать в соответствии с вашими пожеланиями?
Пишите как угодно. Не в моих проектах - и ладно.

0
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
28.01.2014, 18:40 #26
дубль
0
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.01.2014, 18:48 #27
Цитата Сообщение от programina Посмотреть сообщение
Это ни о чем не говорит. Я тоже могу свернуть код в функцию и будет две строки.
Не будет. От того, что часть кода поместите в функцию, количество строк кода не уменьшится, а увеличится.
0
Tiphon
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 7
28.01.2014, 18:48  [ТС] #28
Спасибо всем за такое большое внимание к этой теме. Я всего отошёл на час а тут уже 3 страницы.
Я использовал следующую конструкцию, чтобы проверить все символы по указателю на тип char.

C++
1
2
3
4
5
   for (int i = 0; count[i] != '\0'; ++i){
   if ( !isdigit(count[i]) )
   cout << "ÔîðìГ*ГІ ââåäåГ*ûõ Г¤Г*Г*Г*ûõ Г*åêîððåêòåГ*. ÏðîãðГ*ììГ* áóäåò Г§Г*êðûòГ*." << endl;
   return 0;
   }
0
zss
Модератор
Эксперт С++
6580 / 6142 / 2024
Регистрация: 18.12.2011
Сообщений: 16,014
Завершенные тесты: 1
28.01.2014, 18:51 #29
Tiphon, Со скобками обращайтесь осторожнее:
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; count[i] != '\0'; ++i)
{
   if ( !isdigit(count[i]) )
   {
        cout << "Формат введеных данных некорректен. Программа будет закрыта." << endl;
        system("pause");
        return 0;
    }
}
1
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.01.2014, 18:52 #30
Чтобы не было проблем с русскими символами:
C++
1
if ( !isdigit((unsigned char)(count[i]) )
1
28.01.2014, 18:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.01.2014, 18:52
Привет! Вот еще темы с ответами:

Как на стадии компиляции проверить что число является степенью двойки - C++
Очень простой вопрос - как на стадии компиляции проверить что число является степенью двойки? Как проверить на стадии исполнения знаю, но...

Как проверить массив из char на пустоту? - C++
после чсла выводит буквы М, в том месте где пустые значения, как сделать чтобы они не выводились? number != '\0' - не помогает, NULL тоже ...

Как сохранить float в переменной типа char? - C++
Всем здрасьте. Как можно записать float в char ? И как потом float вытащить из char, если он будет находится примерно посередине ну или...

Как присвоить пустой символ переменной char - C++
Хочу присвоить переменной a,&quot;пустой&quot; символ, чтобы не морочиться и не делать лишних проверок во время вывода cout &lt;&lt; a &lt;&lt; endl; Пишу ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.