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

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

Войти
Регистрация
Восстановить пароль
 
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
#1

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

26.03.2014, 17:44. Просмотров 737. Ответов 13
Метки нет (Все метки)

дана задача ввести номер телефона пробел и дата в формате день. месяц. год. Выполнить простейшую проверку на корректность введенных данных. Я несколько дней учу с++, так что прошу меня простить.
Возможно я выбрал не правильный подход, но на мой взгляд он наиболее оптимален в данной задаче. Даже если я сделал быдлокод прошу мне на это указать и объяснить по чему не работает!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using std::cin;using std::cout;using std::endl;
int main() {
    unsigned __int64 x;int d,m,g;char str; bool flag=true;
    do {
cout<<"Vvedite nomer tel. probel dd.mm.gggg"<<endl<<"+7";
cin>>x>>d>>str>>m>>str>>g;
if (x>9999999999 ||x<1000000000 || d>31 || m>12 || g>2014 || !cin.good()) {
        cout<<"Error";
        cin.clear();
        cin.ignore(255);
        
}
else flag=false;    
}
while(flag);
 cout<<'\n'<<x<<'\n'<<d<<'\n'<<m<<'\n'<<g<<endl;
system("pause");
return 0;
}
cin.clear();
cin.ignore(255); из-за этого куска программа работает некорректно. Не могу понять почему.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2014, 17:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка на корректность введенных данных (C++):

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

Задана дата в пределах года (число – от 1 до 31, месяц – от 1 до 12). Проверить корректность введенных данных - C++
Задана дата в пределах года (число – от 1 до 31, месяц – от 1 до 12). Проверить корректность введенных данных и в случае ошибки вывести...

Проверка на корректность входных данных - C++
Нужно написать программу, которая бы проверяла строку на корректность. Допустимый формат вот такой +7 (233) 555-11-22. Как это сделать? В...

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

Проверка введенных данных - C++
Всем привет! Подскажите пожалуйста, каким образом можно проверить веденные данные при запросе цифр? То есть нужно проигнорить если...

Проверка введенных данных в С++ - C++
Задача такова: Имеется программа для работы с числами (пусть это будет, например, поднесение числа в квадрат, не суть) Соответственно,...

13
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 17:54 #2
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
из-за этого куска программа работает некорректно.
В чём некорректность?

Добавлено через 3 минуты
Сам ввод покажите.
0
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:01  [ТС] #3
На мой взгляд после ошибочного ввода должно снова показывать эту строку
C++
1
cout<<"Vvedite nomer tel. probel dd.mm.gggg"<<endl<<"+7";
а программа зависает на слове ошибка.
0
Миниатюры
Проверка на корректность введенных данных  
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:07 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
cin.ignore(255, '\n');
Добавлено через 1 минуту
А лучше (на мой вкус) вместо этого:
C++
1
2
cin.clear();
while (cin.get() != '\n');
1
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:10  [ТС] #5
Да вы правы.Я побывал такое вариант ввода тогда почему то тоже не получалось, видно ошибся в другом)) А можете написать почему функция без перевода строки не корректно работает? И насколько корректен и оптимален мой код?
0
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
26.03.2014, 18:10 #6
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
x>9999999999 ||x<1000000000
Тут со знаками больше меньше точно всё в порядке?
0
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:13  [ТС] #7
да номер 10 значный. следовательно он не может быть больше или меньше этих параметров иначе он точно не правильный.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:20 #8
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
А можете написать почему функция без перевода строки не корректно работает?
Там, по умолчанию, пропуск символов до EOF, который, при консольном вводе, отсутствует, поэтому происходит зависание.

Добавлено через 4 минуты
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
И насколько корректен и оптимален мой код?
Флаг там лишний. Если правильный ввод, то просто break.
1
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
26.03.2014, 18:25 #9
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
да номер 10 значный. следовательно он не может быть больше или меньше этих параметров иначе он точно не правильный
А если с нуля начинается? Или у Вас таких номеров быть не может?
Лучше считывать char-массив и использовать ф-цию isDigit()
0
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:28  [ТС] #10
Проверка простейшая и этот вариант я не учитываю, в учебных задачах я думаю это допустимо. И где вы видели мобильник в России с нуля а не с 9?

Флаг там лишний. Если правильный ввод, то просто break.
А подробней. Моих знаний не хватает чтобы понять что вы имели ввиду (ну флаг лишний понятно, а как правильно)? Читал что правильнее подключать необходимые функции из пространство имен std (
C++
1
using std::cin;using std::cout;using std::endl;
) чем все пространство имен std (
C++
1
using namespace std;
) насколько это так?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:31 #11
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Читал что правильнее подключать необходимые функции из пространство имен std
Да.
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
А подробней. Моих знаний не хватает чтобы понять что вы имели ввиду (ну флаг лишний понятно, а как правильно)?
while (true), else break.
1
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 1
26.03.2014, 18:31 #12
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
И где вы видели мобильник в России с нуля а не с 9?
Я живу в Украние. У нас все мобильные с нуля . Так что здесь бы Вы свою программу не сдали...
0
recoder
130 / 130 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.03.2014, 18:33 #13
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Флаг там лишний. Если правильный ввод, то просто break.
Я так понимаю переменная flag
0
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:37  [ТС] #14
while (true), else break.
понял разберусь.
У нас все мобильные с нуля . Так что здесь бы Вы свою программу не сдали...
Я этого не знал. Но жил бы я в Украине я бы учитывал это). Мне не кому сдавать я учусь для себя и разбираюсь сам.
0
26.03.2014, 18:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 18:37
Привет! Вот еще темы с ответами:

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

Проверка корректности введенных данных - C++
Всем привет. Есть задача: Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц...

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

Проверка введенных данных; выполнение кода по условию - C++
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; int _tmain(int argc, _TCHAR* argv) { float a, b, c, x, res; ...


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

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

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