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

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

Восстановить пароль Регистрация
 
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
26.03.2014, 17:44     Проверка на корректность введенных данных #1
дана задача ввести номер телефона пробел и дата в формате день. месяц. год. Выполнить простейшую проверку на корректность введенных данных. Я несколько дней учу с++, так что прошу меня простить.
Возможно я выбрал не правильный подход, но на мой взгляд он наиболее оптимален в данной задаче. Даже если я сделал быдлокод прошу мне на это указать и объяснить по чему не работает!
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); из-за этого куска программа работает некорректно. Не могу понять почему.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 17:54     Проверка на корректность введенных данных #2
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
из-за этого куска программа работает некорректно.
В чём некорректность?

Добавлено через 3 минуты
Сам ввод покажите.
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
26.03.2014, 18:01  [ТС]     Проверка на корректность введенных данных #3
На мой взгляд после ошибочного ввода должно снова показывать эту строку
C++
1
cout<<"Vvedite nomer tel. probel dd.mm.gggg"<<endl<<"+7";
а программа зависает на слове ошибка.
Миниатюры
Проверка на корректность введенных данных  
alsav22
5282 / 4801 / 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');
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
26.03.2014, 18:10  [ТС]     Проверка на корректность введенных данных #5
Да вы правы.Я побывал такое вариант ввода тогда почему то тоже не получалось, видно ошибся в другом)) А можете написать почему функция без перевода строки не корректно работает? И насколько корректен и оптимален мой код?
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
26.03.2014, 18:10     Проверка на корректность введенных данных #6
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
x>9999999999 ||x<1000000000
Тут со знаками больше меньше точно всё в порядке?
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
26.03.2014, 18:13  [ТС]     Проверка на корректность введенных данных #7
да номер 10 значный. следовательно он не может быть больше или меньше этих параметров иначе он точно не правильный.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:20     Проверка на корректность введенных данных #8
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
А можете написать почему функция без перевода строки не корректно работает?
Там, по умолчанию, пропуск символов до EOF, который, при консольном вводе, отсутствует, поэтому происходит зависание.

Добавлено через 4 минуты
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
И насколько корректен и оптимален мой код?
Флаг там лишний. Если правильный ввод, то просто break.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
26.03.2014, 18:25     Проверка на корректность введенных данных #9
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
да номер 10 значный. следовательно он не может быть больше или меньше этих параметров иначе он точно не правильный
А если с нуля начинается? Или у Вас таких номеров быть не может?
Лучше считывать char-массив и использовать ф-цию isDigit()
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
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;
) насколько это так?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.03.2014, 18:31     Проверка на корректность введенных данных #11
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Читал что правильнее подключать необходимые функции из пространство имен std
Да.
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
А подробней. Моих знаний не хватает чтобы понять что вы имели ввиду (ну флаг лишний понятно, а как правильно)?
while (true), else break.
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
26.03.2014, 18:31     Проверка на корректность введенных данных #12
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
И где вы видели мобильник в России с нуля а не с 9?
Я живу в Украние. У нас все мобильные с нуля . Так что здесь бы Вы свою программу не сдали...
recoder
 Аватар для recoder
129 / 129 / 28
Регистрация: 13.09.2013
Сообщений: 260
Записей в блоге: 2
26.03.2014, 18:33     Проверка на корректность введенных данных #13
Цитата Сообщение от ыфырф1992 Посмотреть сообщение
Флаг там лишний. Если правильный ввод, то просто break.
Я так понимаю переменная flag
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2014, 18:37     Проверка на корректность введенных данных
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
ыфырф1992
25 / 25 / 12
Регистрация: 08.04.2012
Сообщений: 199
26.03.2014, 18:37  [ТС]     Проверка на корректность введенных данных #14
while (true), else break.
понял разберусь.
У нас все мобильные с нуля . Так что здесь бы Вы свою программу не сдали...
Я этого не знал. Но жил бы я в Украине я бы учитывал это). Мне не кому сдавать я учусь для себя и разбираюсь сам.
Yandex
Объявления
26.03.2014, 18:37     Проверка на корректность введенных данных
Ответ Создать тему
Опции темы

Текущее время: 21:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru