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

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

01.11.2012, 01:43. Показов 2986. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru