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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
#1

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

09.03.2013, 20:04. Просмотров 1569. Ответов 24
Метки нет (Все метки)

Нужно написать программу, которая бы проверяла строку на корректность. Допустимый формат вот такой +7 (233) 555-11-22. Как это сделать? В голову ничего толкового не лезет. Написал вот такое, но оно почему-то не работает, в конце рушится и выдает вот такую ​​ошибку: Run-Time Check Failure #2 - Stack around the variable 'phone' was corrupted.
Самой функции проверки не реализовано, думаю что вы поможете
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
#include <iostream>
 
using namespace std;
 
class Phone
{
    friend ostream &operator<<(ostream &,const Phone&);
    friend istream &operator>>(istream &,Phone &);
private:
    char phon[15];
};
 
ostream &operator<<(ostream & out,const Phone &Obj)
{
    out<<Obj.phon;
 
    return out;
}
 
istream &operator>>(istream &inp,Phone &Obj)
{
    inp>>Obj.phon;
 
    return inp;
}
 
int main()
{
    Phone phone;
    cin>>phone;
    cout<<phone;
    system("pause>0");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 20:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка на корректность входных данных (C++):

Проверка входных данных: вызов и обработка исключения - C++
Всем привет. Не могу разобраться с проверкой входных данных. Нужно чтобы если я ввел какой либо символ вместо числа возбуждалось...

Проверка на корректность введенных данных - C++
дана задача ввести номер телефона пробел и дата в формате день. месяц. год. Выполнить простейшую проверку на корректность введенных данных....

Проверка введенных данных cin на корректность - C++
Вот кусок кода : input1 : cout&lt;&lt;&quot;Введите количество животных которые когда либо жили у вас : &quot;; cin&gt;&gt;amountPats; if (!cin) { ...

Портирование кода на С++ (проверка вводимых данных пользователем на корректность) - C++
Требуется портировать код с С# на С++. Код на шарпе - очень простой. В нем не используются языковые особенности шарпа, перевести, я думаю,...

Проверка правильности входных параметров конструктора - C++
Как проверить допустимость передаваемых входных параметров конструктора класса? Точнее, проверку параметров конечно, можно сделать в теле...

Проверка на корректность операции - C++
Добрый день. Не знаю как лучше задать вопрос. Смысл идеи таков: Есть интерфейс типа данных (IVariable) и наследники от него,...

24
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:20 #2
Цитата Сообщение от The_bolT Посмотреть сообщение
но оно почему-то не работает, в конце рушится и выдает вот такую ​​ошибку: Run-Time Check Failure #2 - Stack around the variable 'phone' was corrupted.
Это если больше 14 символов ввести.

Добавлено через 2 минуты
И зачем эти массивы char если есть string?
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
09.03.2013, 20:22  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
И зачем эти массивы char если есть string?
Нам еще не разрешают использовать string)
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:23 #4
Ввод так лучше:
C++
1
2
3
4
5
6
7
8
9
string phon;
...
 
istream &operator>>(istream &inp, Phone &Obj)
{
    getline(inp, Obj.phon);
 
    return inp;
}
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
09.03.2013, 20:25  [ТС] #5
Ну как с функцией проверки на корректность? Помогите, у меня голова уже не варит) Хотя бы скажите в какую сторону двигаться))
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:32 #6
Цитата Сообщение от The_bolT Посмотреть сообщение
Нам еще не разрешают использовать string)
Если не разрешают, тогда так:
C++
1
2
3
4
5
6
7
8
char phon[20];
...
istream &operator>>(istream &inp, Phone &Obj)
{
    inp.getline(Obj.phon, 20);
 
    return inp;
}
Добавлено через 1 минуту
Цитата Сообщение от The_bolT Посмотреть сообщение
Ну как с функцией проверки на корректность?
Перебор по символу.

Добавлено через 4 минуты
Нужно точнее с форматом определиться. Пробелы?
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
09.03.2013, 20:33  [ТС] #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Пробелы?
Нет.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:33 #8
Хорошо бы словесно описать формат ввода. Тогда будет ясно, что нужно отслеживать.
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
09.03.2013, 20:35  [ТС] #9
Все таки лучше пробелы не учитывать)
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:37 #10
Например: номер должен начинаться с + , за которым следует цифра 7 или 8...

Добавлено через 2 минуты
И важны пробелы. Допускаются или нет. Если допускаются, то сколько. Цифры в номере, количество цифр в круглых скобках, значения цифр и т.д.
1
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
09.03.2013, 20:38  [ТС] #11
Пользователь вводит номер телефона в следующем формате: сначала +, затем одно число, затем и должна идти открытая скобка (три числа и закрытая скобка) снова три числа затем тере - два числа, снова тере - опять два числа! При этом между символами и цифрами могут находиться пробелы, их не учитывать как ошибку!
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:42 #12
После + до скобок одна цифра? Кроме 7 и 8 там может другая быть?
1
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
09.03.2013, 20:44 #13
Предлагаю чтение осуществлять посимвольно, уже на этом этапе отбрасывая пробелы. Попроще будет.
Upd: точнее, это упростит дело, если пробелов может быть переменное число. Если только 0 или 1, то все равно.
0
The_bolT
70 / 70 / 1
Регистрация: 22.01.2013
Сообщений: 231
09.03.2013, 20:45  [ТС] #14
Цитата Сообщение от alsav22 Посмотреть сообщение
После + до скобок одна цифра?
Да.
Цитата Сообщение от alsav22 Посмотреть сообщение
Кроме 7 и 8 там может другая быть?
Может.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
09.03.2013, 20:52 #15
0x10, 6 пост.

Добавлено через 4 минуты
Цитата Сообщение от The_bolT Посмотреть сообщение
Может.
0 может?
0
09.03.2013, 20:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 20:52
Привет! Вот еще темы с ответами:

Проверка строки на корректность - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; #include &lt;conio.h&gt; using namespace std; int main(){ char a; char a1; char a3; ...

Считывание, проверка на корректность - C++
Как считать uint64_t с клавиатуры, вывести на экран и проверить, что это именно неотрицательное целое число, а не double или char...

Проверка указателя на корректность - C++
Есть у меня указатель class* test = new class(); И он в цикле вечно используется. Так вот как сделать проверку , что этот указатель на...

Проверка на корректность логического выражения - C++
Добрый вечер. На входе имеем логического выражение которое может содержать : 1. константы : 0 или 1 2. скобки : () 3....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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