2014-12-29 4 views
-3

Я совершенно не знаком с C++, поэтому, пожалуйста, поймите, что мой вопрос может быть глупым.Предотвращение ввода пользователем определенных символов в C++

Мне нужно создать функцию, которая берет у пользователя таблицу и заполняет ее только конкретными символами. Предположим, что пользователю нужно ввести свое имя. Если пользователь вводит charater от A до Z (или от a до z), символ должен отображаться на экране, и в этом случае - все в порядке. Проблема заключается в том, что когда пользователь вводит запрещенный символ (например, 1-9), это не должно отображаться на экране, а курсор должен оставаться в том же положении).

Вы, ребята, знаете, как это сделать?

+0

Это не возможно со стандартными функциями C++. –

+0

Возможно, вы можете использовать 'getchar' для проверки правильности символа, а затем использовать' putch () ', чтобы удалить его, если это не так? – Pradhan

ответ

1

Может быть, вы можете использовать это, чтобы сделать свою работу:

char ch; 

while(ch = getch()) 
{ 
    if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) 
    { 
     cout << ch; 
    } 
} 

Это будет печатать только [A-Z] [A-Z]. Вы также можете сохранить свой необходимый символ для дальнейшего использования.

+0

Этот ответ предполагает ASCII. –

+0

Если пользователь вводит charater от A до Z (или от a до z), символ должен отображаться на экране. – aerokite

1

В Windows вы можете использовать conio.h.

Кроме того, вы можете перегрузить функцию istream::operator>> сделать решение более элегантный и простой в использовании:

Полный пример:

#include <iostream> 
#include <conio.h> 

using namespace std; 


struct person_t 
{ 
    string name; 
    string last_name; 
}; 

// This is the function you're looking for. 
void get_filtered_string(string &str) 
{ 
    char c; 
    str = ""; 

    do 
    { 
     c = _getch(); 

     if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) 
     { 
      putchar(c); // 1 
      str.push_back(c); 
     } 

    } while (c != '\r'); // 2 

} 


istream &operator>>(istream &stream, person_t &person) 
{ 
    string str = ""; 

    cout << "Enter name: "; 
    get_filtered_string(str); 
    person.name = str; 
    cout << endl; 

    cout << "Enter last name: "; 
    get_filtered_string(str); 
    person.last_name = str; 
    cout << endl; 

    return stream; 
} 

int main() 
{ 
    person_t person; 
    cin >> person; 
    cout << person.name.c_str() << " " << person.last_name.c_str() << endl; 
    return 0; 
} 
  1. Выходной символ на экран.

  2. В Windows, когда вы нажмете Enter вы вводите два символа '\r' и '\n' в таком порядке. Вот почему мы проверяем здесь '\r'.

+0

Большое спасибо за это решение, оно сработало. Единственное, что можно добавить, это возможность использовать обратные пространства и другие клавиши редактирования текста, но это можно легко реализовать, отредактировав IF. Большое спасибо –

+0

Этот ответ предполагает ASCII. –

+0

Это проблема? –

Смежные вопросы