5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
1 | |
Проверка ввода16.04.2010, 23:47. Показов 13405. Ответов 48
Метки нет (Все метки)
Всем привет. Прошу обясните мне как зделать проверку вводимых даных. Мне нужно к примеру задать числовой масив типа (int). Как зделать так чтоб когда пользователь вводит к примеру Ф123;:87!"№;;%:!"№;%:?*(99321фвфв и тд.. или что нить подобное после проверки попросить повторить ввод даного елемента масива(или числа)?
Я находил в темах немного подобное моему примеру но не смог розобратса, покажыте пожалуста как ето зделать и если можна то в Borland C++. Зарание спасибо.
0
|
16.04.2010, 23:47 | |
Ответы с готовыми решениями:
48
Visual C++ проверка ввода на число, проверка на кирилицу C++ проверка ввода Проверка ввода Проверка ввода |
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
17.04.2010, 16:26 [ТС] | 21 |
neske те респект!!! neske неске круче всех!!!
твоя прога лутшая я токо доделал чтоб с минусовые значения мона было вводить вот код!! Код
#include <iostream.h> int main() { setlocale( LC_ALL,"Russian" ); int N; std::cout << "Введите кол-во элементов массива: "; std::cin >> N; int *MAS=new int [N]; char ch[20]={'0'}; // заполняем char массив нулями. int key; for (int i=0; i<N; i++) { std::cout << "MAS["<< i <<"]: "; // запрашиваем число, std::cin >> ch; // и записываем его в массив char. for (int j=0; j<20; j++) // циклом проходим по всем элементам массива char. { key=int(ch[j]); // переменной key присваиваем номер знака в ANSI. if (key==0) break; // т.к. первоначально массив был заполнен нулями, делаем проверку. if ((key<45) ||(key==46) ||(key==47) || (key>57)) // если это не цифра, выводим сообщение и запрашиваем ввод еще раз. { std::cout << "Неверный ввод. Попробуйте еще раз:\n"; i-=1; break; } } MAS[i]=atoi(ch); } for(int i=0;i<N;i++){cout<<" "<<MAS[i];} delete []MAS; system("pause"); return 0; } [
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
17.04.2010, 17:11 | 22 |
Morfiy, код который написал уважаемого neske имеет изьян, т.к. он основывается на конкретных кодах символов цифр, что совсем не хорошо. В зависимости от используемой кодовой страницы, коды символов могут меняться.
Для того чтобы обойти подобную ситуацию необходимо использовать функцию isdigit.
1
|
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
|
|
17.04.2010, 20:41 | 23 |
CyBOSSeR, на самом деле когда писал, пытался нагуглить что-то подобное, но у меня не удалось.
Учту на будущее, спасибо. PS - Morfiy,
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
17.04.2010, 21:51 | 24 | |||||
neske, не за что.
Еще было бы неплохо выделить код отвечающий за ввод цифры в отдельную функцию, как то так например (не проверял):
0
|
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
18.04.2010, 12:59 [ТС] | 25 |
Всем спасибо за помощь если у кого будут идеи как улутшыть способ проверки даных вылажуйте )
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
18.04.2010, 15:48 | 26 |
я же написал способ, чтоб вообще нельзя было вводить что-то ненужное, т.е. без всяких всплывающих ошибок, на экран выводится и числу присваивается только то, что можно ввести
там только нужно дописать для плавающей точки и знака минус)
0
|
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
18.04.2010, 16:29 [ТС] | 27 |
твоя прога не совсем коректно работа мож помоч ето убать а именно если не чево не вводиш а нажымаеш ентр числу присваюетса 0
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
18.04.2010, 16:39 | 28 |
а нужно, чтоб не выводило 0, а дальше запрашивало ввод, пока не будет присвоено какое-либо значение?
т.е. пока мы сами не нажмем 0, число не должно быть образовано?
0
|
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
18.04.2010, 16:54 [ТС] | 29 |
скажу ну оч попроще
когда запускаеш твою прогу и просто нажымаеш токо Enter оно присваюет масиву значение "0" нада чтоб оно просто не чево не делал)
1
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
18.04.2010, 17:08 | 30 | |||||
Morfiy, попробуй:
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
||||||
18.04.2010, 17:23 | 31 | |||||
для проверки в ф-ции main() пишем х, чтобы убедится в том, какое именно значение х остается после ввода, прежнее или введенное и обработанное ф-цией) p.s. спасибо вам, Morfiy, благодаря вашим замечаниям ф-ция стала лучше)
0
|
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
18.04.2010, 18:02 [ТС] | 32 |
В 32-й строке кода у меня выдает ошыбку
Expression syntax Undefined symbol 'ostream_iterator' Добавлено через 56 секунд ето у CyBOSSeR Добавлено через 12 минут Ех... Ты не понял что я имел виду. float x=2;//здесь ты задаеш первоначальное значение х которое будет выводитса если пользователь не введет ни одного символа з клавиатуры и нажмет Ентер Вот так будет работать прога ета: //------ 2 Для продолжения нажмите любую клавишу . . . //-- суть проблемы в том что к примеру какаято блондинка на роботе будет пить кофе и случайно зажмет Ентер и выйдет так что она задаст весь масив числами 2
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
18.04.2010, 18:04 | 33 |
0
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
|
18.04.2010, 18:14 | 34 |
Morfiy, так вы попросили ничего не присваивать х, вот и ни чего не присваивается, если будет просто float x, то массив будет забит вообще левыми числами, изначально он забивался нулями, и после вашего вопроса, я хотел уточнить, если пользователь нажимает просто Enter, без присваивания до этого какого-либо значения, то программа ничего не делает, а ждет, пока не будет введено хоть какое-то значение?
как обычный cin >> x; жмем Enter, а оператор ждет, пока не получит какой-то символ перед нажатием Enter?
0
|
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
18.04.2010, 18:44 [ТС] | 35 |
Да.
когда пользователь будет нажымать ентер и перед етим он не ввел ни какого значения, чтоб програма ждала пока независимо скоко раз он надмет ентер пока пользователь не введет значение Добавлено через 15 минут у тя таже проблема что и у Vorona. когда пользователь будет нажымать ентер и перед етим он не ввел ни какого значения то твоя програма присваиваит значения 0 масиву //---- std::copy(arr, arr + size, std::ostream_iterator<int>(std::cout, " ")); что у тебя делает ета функцыя? а то когда я ее удалаю из кода прога в конце выводит результат так: 1 2 3 4 5 6 7 8 9 0 а когда ее не удалять результат выводитса так: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 Вот что я добавил в код твоей програмы: Код
for (int i = 0; i < size; ++i) { std::cout << arr[i]<<" "; } getch();
0
|
2347 / 1720 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
18.04.2010, 19:04 | 37 | |||||
Выводит содержание массива на экран.
Проблема решается на раз. Новая версия функции EnterNumber:
1
|
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
|
||||||
18.04.2010, 19:21 | 38 | |||||
1
|
5 / 5 / 1
Регистрация: 16.04.2010
Сообщений: 64
|
|
18.04.2010, 19:36 [ТС] | 39 |
Спасибо всем за помощь!!!
найболее правильный придставили Vorona и CyBOSSeR
0
|
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
|
||||||
22.04.2010, 12:18 | 40 | |||||
Понимаю, что уже поздно... но, все же вот еще вариант :
0
|
22.04.2010, 12:18 | |
22.04.2010, 12:18 | |
Помогаю со студенческими работами здесь
40
gets() проверка ввода Проверка ввода Проверка ввода Проверка ввода Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |