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

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

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

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

16.12.2012, 13:18. Просмотров 1340. Ответов 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() );
Код самой программы думаю не важен, в нем заполняется многомерный интовый массив и далее с ним проводятся некоторые манипуляции.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 13:27     Посимвольная проверка вводимых данных #2
Сначала надо вводить строку. Затем ее проверять на наличие "подозрительных" символов. Пользуйся ф-ией atoi() для перевода в int. Строка в стиле C++ - #include <cstring>.
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
16.12.2012, 13:39     Посимвольная проверка вводимых данных #3
можно sscanf использовать для чтения дробных чисел из строки или atof
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 14:02     Посимвольная проверка вводимых данных #4
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Строка в стиле C++ - #include <cstring>.
Вы хотели сказать в стиле Си
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 14:03     Посимвольная проверка вводимых данных #5
Цитата Сообщение от go Посмотреть сообщение
Вы хотели сказать в стиле Си
Нет, я хотел сказать в стиле C++

Добавлено через 21 секунду
cstring - из C++)
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 14:09     Посимвольная проверка вводимых данных #6
Цитата Сообщение от sovaz1997 Посмотреть сообщение
cstring - из C++)
Хидер да, но строки в стиле Си
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
16.12.2012, 14:10     Посимвольная проверка вводимых данных #7
Цитата Сообщение от go Посмотреть сообщение
Хидер да, но строки в стиле Си
Используется тип не char*, а string
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
16.12.2012, 14:13     Посимвольная проверка вводимых данных #8
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Используется тип не char*, а string
<cstring> - функции для работы со строками Си
<string> - класс std::string
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
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
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
16.12.2012, 17:43     Посимвольная проверка вводимых данных #11
Цитата Сообщение от forsage Посмотреть сообщение
if(stroka[i]=='0' || '1' || ...)
C++
1
if (stroka[i]>='0' && stroka[i]<='9'||stroka[i]=='.')
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 18:33     Посимвольная проверка вводимых данных
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
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;
        }
        }
 
    }
 
}
Громоздко, но работает
Yandex
Объявления
16.12.2012, 18:33     Посимвольная проверка вводимых данных
Ответ Создать тему
Опции темы

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