Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200

Как лучше поставить ограничение на ввод букв, и знаков перпинания

01.11.2012, 01:43. Показов 3003. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!
подскажите, как лучше поставить ограничение на ввод букв, и знаков перпинания (,.! ,пробел и других, которые используют в предложениях) ?
C++
1
2
3
4
5
cout<<"enter a text-line:"<<endl;
cin.get();
cin.getline(input, 100);
cout<<"You entered"<<" \" "<<input<<" \" "<<endl;
cout<<endl;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.11.2012, 01:43
Ответы с готовыми решениями:

Как поставить условие на количество букв/знаков?
Сделан элемент управления, который считывает/записывает значения байтов с смещений в файле и преобразует их в буквы/знаки в текстовом поле...

Как поставить ограничение на ввод только числа
у меня вопрос ) )) как поставить ограничение на ввод например я хочу вводить только числа ))) есть ли что то подобное как...

Как организовать запрет на ввод букв и знаков?
1. Подскажите пожалуйста, как организовать запрет на ввод букв и знаков. То есть, есть задачи, где нужно запрашивать от пользователя...

11
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2012, 02:44
Поясните, в чём ограничение? Не вводить что?

Добавлено через 19 минут
Если задача в том, чтобы только цифры принимать, то, как вариант, посимвольный ввод (или посимвольный анализ введённого) и использование функций из библиотеки cctype. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
#include <string>
#include <cctype> 
using namespace std; 
 
int main () 
 { 
 string str;
 char ch;
 while (true)
 { 
    cin.get(ch);
    if (!cin) break;
    if (isdigit((unsigned char)ch)) str.push_back(ch);
 }
 
 cout << str << endl;
 
 cin.clear();
 cin.get();
 return 0;
}
Миниатюры
Как лучше поставить ограничение на ввод букв, и знаков перпинания  
1
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2012, 02:51
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream> 
#include <string>
#include <cctype> 
using namespace std; 
 
int main () 
 { 
 string str;
 char ch;
 while (true)
 { 
    cin.get(ch);
    if (ch == '\n') break;
    if (isdigit((unsigned char)ch)) str.push_back(ch);
 }
 
 cout << str << endl;
 
 cin.clear();
 cin.get();
 return 0;
}
Миниатюры
Как лучше поставить ограничение на ввод букв, и знаков перпинания  
1
 Аватар для letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
01.11.2012, 16:30  [ТС]
принимать буквы,точку, запятую, восклицательный и вопросительный знаки, и т.д.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2012, 18:12
Что не принимать?
0
 Аватар для letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
01.11.2012, 18:51  [ТС]
не принимать цифры
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.11.2012, 19:09
C++
1
if (!isdigit((unsigned char)ch)) str.push_back(ch);
Миниатюры
Как лучше поставить ограничение на ввод букв, и знаков перпинания  
1
 Аватар для letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
02.11.2012, 01:36  [ТС]
а можно такой же прием использовать, в этом случае
я запрашиваю ввести два числа
но если скажем вводят 4711
3.14159265 messing up
, у меня выводится сообщение об ошибке
как сделать, чтобы все работало как сейчас, но все остальное(лишнее), что вводится просто игнорилось и не выводило сообщение об ошибке?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
while(true)
{
cout<<"enter one integer and one real number:"<<endl;
cin>>number6;
cin>>real;
if( cin.good())
    {
              //cout<<"The real number is:"<<endl;
        
              std::cout<<std::fixed<<std::setprecision(3)<<real<<endl;
              
              stringstream ss2;//potok dlja strok
               ss2 << real; //  v potok 4islo
               string str2;
               ss2>> str2; // iz potoka stroka
               //cout <<"size of real:"<< (str2.size()+4) << endl; //vivod koli4estva simvolov v stroke
               cout<<"The real number is:";
               for (int i=0;i<(str2.size()+4);i++){
                   
               cout<<" ";
               }
              ;
              
               cout<<real;
              // cout<<endl;
              
                                         //cout<<"The integer is:"<<number6<<endl;
                                         cout<<endl;
                                         stringstream s3;//potok dlja strok
               
               s3 << number6; //  
               string str3;
               s3 >> str3; // 
               //cout <<"size of int:"<< str3.size() << endl; 
               cout<<"The integer is:";
               for (int i=0;i<str3.size();i++){
               cout<<" ";}
               cout<<number6;
               cout<<endl;
               cin.ignore(10, '\n');
                   break;
     }
     cin.clear();
     cout << "nepraviljnij vvod " << endl;
     cin.ignore(10, '\n');
     }
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.11.2012, 03:44
Цитата Сообщение от letnjaja Посмотреть сообщение
но все остальное(лишнее), что вводится просто игнорилось и не выводило сообщение об ошибке?
Делайте ввод не через cin>>. Код в 3 посте. Получите строку цифр (дальше вы всё равно число в строку переводите). Только подумайте насчёт отрицательных чисел (если предполагается, что они будут вводиться). Поток ss2 минус перед числом (или плюс) корректно обработает. Нужно только в коде, из 3 поста, дополнительную проверку сделать на минус перед первой цифрой (если первый символ перед цифрой минус, то поместить в строку).


Кликните здесь для просмотра всего текста
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <iomanip>
using namespace std;
 
int main()
{ 
setlocale (LC_ALL,"Russian");
    
while(true)
{
cout<<"enter one integer and one real number:"<<endl;
string number6;
char ch;
 
while (true)
{ 
    cin.get(ch);
    if (ch == '\n') break;
    if (ch == '-' && number6.empty() && isdigit((unsigned char)cin.peek()))
         number6.push_back(ch);
    else if (isdigit((unsigned char)ch)) number6.push_back(ch);
    
}
cin.clear();
 
cout << number6 << endl;
//cin>>number6;
 
string real;
while (true)
{ 
    cin.get(ch);
    if (ch == '\n') break;
    if (ch == '-' && real.empty() && isdigit((unsigned char)cin.peek()))
         real.push_back(ch);
    else if (isdigit((unsigned char)ch)) real.push_back(ch);
}
cin.clear();
 
cout << real << endl;
//cin>>real;
 
    
    //cout<<"The real number is:"<<endl;
        
    //std::cout << std::fixed << std::setprecision(3) << real << endl;
              
    //stringstream ss2;//potok dlja strok
    //ss2 << real; //  v potok 4islo
    //string str2;
    //ss2 >> str2; // iz potoka stroka
    //cout <<"size of real:"<< (str2.size()+4) << endl; //vivod koli4estva simvolov v stroke
    cout<<"The real number is:";
    for (int i = 0; i < (/*str2*/real.size() + 4); i++)
            cout<<" ";
    
    cout << real;
    //cout<<endl;
              
    //cout<<"The integer is:"<<number6<<endl;
    cout << endl;
    //stringstream s3;//potok dlja strok
               
    //s3 << number6; //  
    //string str3;
    //s3 >> str3; // 
    //cout <<"size of int:"<< str3.size() << endl; 
    cout << "The integer is:";
    for (int i = 0; i < /*str3*/number6.size(); i++)
            cout<<" ";
    
    cout << number6;
    cout << endl << endl;
    //cin.ignore(10, '\n');
    break;
     
     //cin.clear();
     //cout << "nepraviljnij vvod " << endl;
     //cin.ignore(10, '\n');
 }
   
   
  system("PAUSE");
  return EXIT_SUCCESS;
}
0
 Аватар для letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
02.11.2012, 04:07  [ТС]
че-то ничего не видно мне из- за цитаты. тоесть я имею ввиду такую ситуацию, я запрашиваю 2 числа (целое и реальное), а вводят через пробел целое. реальное и еще какое-то слово. и тогда выдается сообщение об ошибке. а я хочу сделать, чтобы слово считали, но проигнорировали и в you entered его не было, а вывели только 2 числа и без errorov.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
02.11.2012, 04:29
Цитата Сообщение от letnjaja Посмотреть сообщение
че-то ничего не видно мне из- за цитаты
Что не видно?

Добавлено через 2 минуты
Цитата Сообщение от letnjaja Посмотреть сообщение
тоесть я имею ввиду такую ситуацию, я запрашиваю 2 числа (целое и реальное), а вводят через пробел целое. реальное и еще какое-то слово. и тогда выдается сообщение об ошибке. а я хочу сделать, чтобы слово считали, но проигнорировали и в you entered его не было, а вывели только 2 числа и без errorov.
9 пост.

Добавлено через 2 минуты
Зачем вам ввод чисел, если потом переводите их в строки? Читайте сразу в строки. Если строки через пробел, то cin >> считает две строки, то что после второй строки оставит в потоке (пред следующим вводом нужно очистить), ошибки не выдаст:
C++
1
2
3
4
5
6
7
string str1, str2;
cin >> str1 >> str2;
 
cout << str1 << endl << str2 << endl;
 
cin.clear();
while (cin.get() != '\n');
Добавлено через 5 минут
В общем, код зависит от предполагаемого формата ввода.
1
 Аватар для letnjaja
53 / 3 / 0
Регистрация: 08.10.2011
Сообщений: 200
02.11.2012, 17:28  [ТС]
спасибо, теперь слово игнорит и все отлично, но появилась другая проблема
C++
1
std::cout<<std::fixed<<std::setprecision(3)<<real<<endl;
мне надо как-то по другому задать эту точность для реального числа, но теперь я не знаю как это реально сделать, если я вывожу str

пример:
Enter one integer and one real number: 4711
3.14159265 messing up
The real is: 3.142
The integer is: 4711

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//enter one integer and one real number
while(true)
{
cout<<"enter one integer and one real number:"<<endl;
cin>>number6;
cin>>real;
if( cin.good())
    {
              //cout<<"The real number is:"<<endl;
        
              //std::cout<<std::fixed<<std::setprecision(3)<<real<<endl;
              
              stringstream ss2;//potok dlja strok
               ss2 << real; //  v potok 4islo
               string str2;
               ss2>> str2; // iz potoka stroka
               //cout <<"size of real:"<< (str2.size()+4) << endl; //vivod koli4estva simvolov v stroke
               cout<<"The real number is:";
               for (int i=0;i<(str2.size()+4);i++){
                   
               cout<<" ";
               }
              ;
              cout<<str2;
               //cout<<real;
              // cout<<endl;
              
                                         //cout<<"The integer is:"<<number6<<endl;
                                         cout<<endl;
                                         stringstream s3;//potok dlja strok
               
               s3 << number6; //  
               string str3;
               s3 >> str3; // 
               //cout <<"size of int:"<< str3.size() << endl; 
               cout<<"The integer is:";
               for (int i=0;i<str3.size();i++){
               cout<<" ";}
               cout<<str3;
               //cout<<number6;
               cout<<endl;
              // cout << str2 << endl << str2 << endl;
 
               cin.clear();
               while (cin.get() != '\n');
               cin.ignore(10, '\n');
                   break;
     }
     cin.clear();
     cout << "nepraviljnij vvod " << endl;
     cin.ignore(10, '\n');
     }
Миниатюры
Как лучше поставить ограничение на ввод букв, и знаков перпинания  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2012, 17:28
Помогаю со студенческими работами здесь

Как поставить запрет на ввод букв в форме textBox?
Есть процедура. Что в ней написать, чтобы сделать запрет на ввод букв к примеру? procedure Form1.textBox1_TextChanged(sender: Object;...

Ограничение на ввод количество знаков в Edit (не более Х и не менее Х)
На событие OnChange компонента TEdit стоит условие: Button1.Enabled:=(Length(Edit1.Text)&gt;2);(Если указано более трех знаков - тогда...

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

Ограничение на ввод букв!
Приветствую Вас друзья! В общем такая проблема: Нужно выполнить проверку на ввод только цифр, если вместо цифры введена буква запросить...

Ограничение на ввод букв в программе
Подскажите, пожалуйста, как ограничить еще и ввод букв при запуске программы? Что-то никак не могу додуматься( не судите строго, я только...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru