Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
#1

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

26.03.2014, 17:44. Просмотров 884. Ответов 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
Ответы с готовыми решениями:

Проверка введенных данных cin на корректность
Вот кусок кода : input1 : cout&lt;&lt;&quot;Введите количество животных которые когда...

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

Проверка на корректность входных данных
Нужно написать программу, которая бы проверяла строку на корректность....

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

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

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

Добавлено через 3 минуты
Сам ввод покажите.
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:01  [ТС] #3
На мой взгляд после ошибочного ввода должно снова показывать эту строку
C++
1
cout<<"Vvedite nomer tel. probel dd.mm.gggg"<<endl<<"+7";
а программа зависает на слове ошибка.
0
Миниатюры
Проверка на корректность введенных данных  
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:07 #4
Лучший ответ Сообщение было отмечено ыфырф1992 как решение

Решение

C++
1
cin.ignore(255, '\n');
Добавлено через 1 минуту
А лучше (на мой вкус) вместо этого:
C++
1
2
cin.clear();
while (cin.get() != '\n');
1
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:10  [ТС] #5
Да вы правы.Я побывал такое вариант ввода тогда почему то тоже не получалось, видно ошибся в другом)) А можете написать почему функция без перевода строки не корректно работает? И насколько корректен и оптимален мой код?
0
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
26.03.2014, 18:10 #6
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
x>9999999999 ||x<1000000000
Тут со знаками больше меньше точно всё в порядке?
0
ыфырф1992
25 / 25 / 17
Регистрация: 08.04.2012
Сообщений: 200
26.03.2014, 18:13  [ТС] #7
да номер 10 значный. следовательно он не может быть больше или меньше этих параметров иначе он точно не правильный.
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:20 #8
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
А можете написать почему функция без перевода строки не корректно работает?
Там, по умолчанию, пропуск символов до EOF, который, при консольном вводе, отсутствует, поэтому происходит зависание.

Добавлено через 4 минуты
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
И насколько корректен и оптимален мой код?
Флаг там лишний. Если правильный ввод, то просто break.
1
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
26.03.2014, 18:25 #9
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
да номер 10 значный. следовательно он не может быть больше или меньше этих параметров иначе он точно не правильный
А если с нуля начинается? Или у Вас таких номеров быть не может?
Лучше считывать char-массив и использовать ф-цию isDigit()
0
ыфырф1992
25 / 25 / 17
Регистрация: 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
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:31 #11
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Читал что правильнее подключать необходимые функции из пространство имен std
Да.
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
А подробней. Моих знаний не хватает чтобы понять что вы имели ввиду (ну флаг лишний понятно, а как правильно)?
while (true), else break.
1
Algoritmer
155 / 95 / 24
Регистрация: 07.03.2013
Сообщений: 490
Записей в блоге: 1
26.03.2014, 18:31 #12
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
И где вы видели мобильник в России с нуля а не с 9?
Я живу в Украние. У нас все мобильные с нуля . Так что здесь бы Вы свою программу не сдали...
0
recoder
130 / 130 / 53
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.03.2014, 18:33 #13
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Флаг там лишний. Если правильный ввод, то просто break.
Я так понимаю переменная flag
0
ыфырф1992
25 / 25 / 17
Регистрация: 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

Проверка введенных данных
cout &lt;&lt; &quot;vvedite znacheniye storony a\t&quot;; cin &gt;&gt; a; cout &lt;&lt; &quot;vvedite...

Проверка введенных данных
Всем привет! Подскажите пожалуйста, каким образом можно проверить веденные...

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


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

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

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