Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
forsage
0 / 0 / 0
Регистрация: 21.07.2010
Сообщений: 9
#1

Посимвольная проверка вводимых данных - C++

16.12.2012, 13:18. Просмотров 1476. Ответов 11
Метки нет (Все метки)

Доброго времени суток.
Такая проблема:
нужно запретить пользователю вводить не цифры и дробные числа через запятую.
т.е. 4213 - можно, 21. 2 - тоже можно.
фыф - нельзя, 312,32 - нельзя
Перелопатил много форумов и статей, с символами все ок, а вот с запятой все плохо. Цифры до запятой просто идут в буфер и используются дальше. т.е. если я буду заполнять массив из 3 элементов таким образом: 1,2; 2,3; 3,2 - он заполнится значениями 1; 2; 3. Это плохо.
Как быть?
для определения символов пользуюсь такой конструкцией:
C++
1
2
3
4
5
6
7
8
9
 int x;
do {
 
cout << "Please enter an x: " << endl;
cin.clear();
cin.sync();
cin>>x;
 
} while ( cin.fail() );
Код самой программы думаю не важен, в нем заполняется многомерный интовый массив и далее с ним проводятся некоторые манипуляции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 13:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посимвольная проверка вводимых данных (C++):

Проверка вводимых данных. - C++
предполагается, что функция будет проверять, что ввел пользователь, и, если он ввел не натуральное число заранее заданного диапазона,...

Проверка вводимых данных - C++
#include &lt;iostream&gt; using namespace std; int main() { double a, b, c; cout &lt;&lt; &quot;Enter the first side of the...

Проверка вводимых данных - C++
Доброго времени суток, форумчане. Я столкнулся с такой проблемой: при введении еденицы измерения, если та инициализирована ранее то все...

Проверка вводимых данных - C++
Вот часть программы int main(void) { int vop; setlocale(LC_ALL, &quot;Russian&quot;); int mas1, mas2, mas3, outmas; int ke1, ke2,...

Проверка на коректность вводимых данных - C++
Есть такой код где данные вводятся целого типа( int x; cin &gt;&gt; x; ). Вопрос такой как проверить действительно ли введено число либо нет...

Проверка корректности вводимых данных - C++
Есть программа на проверку високосного года. Преподаватель при проверке вводит &quot;5 Аотао&quot; к примеру и программа читает первое число и...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 13:27 #2
Сначала надо вводить строку. Затем ее проверять на наличие "подозрительных" символов. Пользуйся ф-ией atoi() для перевода в int. Строка в стиле C++ - #include <cstring>.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
16.12.2012, 13:39 #3
можно sscanf использовать для чтения дробных чисел из строки или atof
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 14:02 #4
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Строка в стиле C++ - #include <cstring>.
Вы хотели сказать в стиле Си
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 14:03 #5
Цитата Сообщение от go Посмотреть сообщение
Вы хотели сказать в стиле Си
Нет, я хотел сказать в стиле C++

Добавлено через 21 секунду
cstring - из C++)
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 14:09 #6
Цитата Сообщение от sovaz1997 Посмотреть сообщение
cstring - из C++)
Хидер да, но строки в стиле Си
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 14:10 #7
Цитата Сообщение от go Посмотреть сообщение
Хидер да, но строки в стиле Си
Используется тип не char*, а string
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 14:13 #8
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Используется тип не char*, а string
<cstring> - функции для работы со строками Си
<string> - класс std::string
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 14:19 #9
В Си классов не было)
forsage
0 / 0 / 0
Регистрация: 21.07.2010
Сообщений: 9
16.12.2012, 17:16  [ТС] #10
Спасибо за наводку. А можно небольшой пример?

Добавлено через 2 часа 28 минут
разобрался, но к сожалению только с одним символом. т.е. запятую код не пропускает. А как быть с буквами?
есть вариант, чтобы программа проверяла на соответствие цифре, т.е. если символ цифра - все хорошо, идем дальше. нет - сообщаем об этом. Но как указать все цифры? вариант типа if(stroka[i]=='0' || '1' || ...) не работает.
Что-то я уже туплю
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
16.12.2012, 17:43 #11
Цитата Сообщение от forsage Посмотреть сообщение
if(stroka[i]=='0' || '1' || ...)
C++
1
if (stroka[i]>='0' && stroka[i]<='9'||stroka[i]=='.')
forsage
0 / 0 / 0
Регистрация: 21.07.2010
Сообщений: 9
16.12.2012, 18:33  [ТС] #12
всем спасибо, справился с задачей.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void input(double** a, int n)
{
    setlocale (0,"");
    string stroka;
    int size,k;
    int i, j;
    int temp;
 
    for (i=0; i<n; i++)
    {
        for (j=0; j<n; j++)
        {
        k=1;
        while(k==1)
        {   cout<<"Введите целочисленный элемент массива с номером: "<<i<<j<<endl;
            cin>>stroka;
            size=stroka.size();
            for (int t=0; t<size; t++)
            {
                if ((stroka[t]!='0') && (stroka[t]!='1') && (stroka[t]!='2') && (stroka[t]!='3') && (stroka[t]!='4') && (stroka[t]!='5') && (stroka[t]!='6') && (stroka[t]!='7') && (stroka[t]!='8') && (stroka[t]!='9') && (stroka[t]!='-')) {cout<<"Ошибка! Повторите ввод\n"; k=1; break;   }
                else k=0;
            }
        temp = atoi(stroka.c_str());
        a[i][j]=temp;
        }
        }
 
    }
 
}
Громоздко, но работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 18:33
Привет! Вот еще темы с ответами:

Проверка типа вводимых данных. - C++
Собственно,как осуществить ? К примеру,здесь: int main() { int x; int y; cin &gt;&gt; x;

Проверка корректности вводимых данных - C++
Здравствуйте, подскажите,пожалуйста, как прописать условия проверки. Мне нужно: если вводится радиус e больше одной из сторон, выводилось...

Проверка вводимых данных на соответствие типа - C++
Задание само очень простое - вычитание матриц, с помощью перегрузки функций (одна функция вычитает типы short, другая long double). ...

Портирование кода на С++ (проверка вводимых данных пользователем на корректность) - C++
Требуется портировать код с С# на С++. Код на шарпе - очень простой. В нем не используются языковые особенности шарпа, перевести, я думаю,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.12.2012, 18:33
Ответ Создать тему
Опции темы

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