Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
bumbalalaxa
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
#1

Вводить пятизначное число пока не будет введено правильноеповторять ввод, пока не будет введено пятизначное число. Не получается выполнить задание. - C++

29.10.2013, 16:10. Просмотров 1254. Ответов 16
Метки нет (Все метки)

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;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    cout << "\t\t\tДеление числа на разряды." << endl;
    cout << endl;
 
    int a;
 
    cout << "введите пятизначное число: ";
    cin >> a;
    cout << endl;
 
    for (int i = a; i <= 9999;i >= 100000)
    {
        cout << "Введите пятизначное число: ";
        cin >> a;
 
        if ((i > 9999) && (i < 100000))
        {
            cout << "1 цифра равна: " << i / 10000 << endl;
            cout << "2 цифра равна: " << (i / 1000) % 10 << endl;
            cout << "3 цифра равна: " << (i / 100) % 10 << endl;
            cout << "4 цифра равна: " << (i / 10) % 10 << endl;
            cout << "5 цифра равна: " << i % 10 << endl;
        }
    }
 
 
    system("pause >> void");
}
я в с++ совсем новичок.
Нужно сделать так что бы сообщение "Введите пятизначное число:" выскакивало до тех пор пока его не введут правильно. а потом что бы программа продолжилась. что я не правильно сделал может мне кто нибудь подсказать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.10.2013, 16:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вводить пятизначное число пока не будет введено правильноеповторять ввод, пока не будет введено пятизначное число. Не получается выполнить задание. (C++):

Вводить отрицательные числа до тех пор пока не будет введено положительное число
Вводить отрицательные числа до тех пор пока не будет введено положительное...

Вводить два числа и искать их произведение, до тех пор пока последнее число не будет введено равным 1
Вводить два числа и искать их произведение, до тех пор пока последнее число не...

Вводить с клавиатуры числа и выводить квадраты этих чисел до тех пор, пока не будет введено число 0
Нужно составить программу циклической структуры с использованием инструкции...

Вводить с клавиатуры целые числа (>0) и выводить на экран квадраты этих чисел до тех пор, пока не будет введено число 0. Использовать цикл do...while.
Вводить с клавиатуры целые числа (&gt;0) и выводить на экран квадраты этих чисел...

Выводить на экран квадраты чисел до тех пор, пока не будет введено число 0
Вводить с клавиатуры целые числа (&gt;0) и выводить на экран квадраты этих чисел...

Выводить на экран квадраты введенных чисел до тех пор, пока не будет введено число 0
Вводить с клавиатуры целые числа (&gt;0) и выводить на экран квадраты этих чисел...

16
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
29.10.2013, 16:35 #2
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
#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
#include <fstream>
 
using std::cout;
using std::string;
using std::stringstream;
 
int getInt5Symbols()
{
    string in;
    int res;
    stringstream er;
    getline(cin, in);
    er << in;
    er >> res;
    if (res > 9999 && res < 100000) return 0;    // То что ввёл пользователь нам не нужно
    return res;
}
 
int main()
{   
    int n;
    cout << "Enter amount ";
    while(!n)
    {
        n = getInt5Symbols();
    }
    // Работаем с 5-ти значным int
    return 0;
}
Самое правильное решение - анализировать то, что вводит пользователь как строку.
0
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.10.2013, 16:41 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
bool flag = true;
int b;
while (flag)
{
   int i = 0;
   cin >> b;
   int a = b;
   while (a)
   {
       a = a / 10;
       i++;
   }
   if (i == 5)
      flag = false;
}
как-то так

Добавлено через 5 минут

Не по теме:

XRuZzz, это всех так запарило с переводами типов или это мода такая пошла перегонять типы через потоки?

0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
29.10.2013, 16:46 #4
Цитата Сообщение от metaluga145 Посмотреть сообщение
XRuZzz, это всех так запарило с переводами типов или это мода такая пошла перегонять типы через потоки?
Пользователь != компьютер
пользователь не умеет вводить числа, речь пользователя - текст, а в тексте компьютер должен искать нужные для себя исходные данные
немного улучшил.
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
35
36
#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
#include <fstream>
 
using std::cin;
using std::cout;
using std::string;
using std::stringstream;
 
int getInt5Symbols()
{
    string in;
    int res;
    stringstream er;
    getline(cin, in);
    er << in;
    er >> res;
    if (res < 10000 && res > 99999) return 0;    // То что ввёл пользователь нам не нужно
    return res;
}
 
int main()
{   
    int n;
    cout << " Введите 5-ти значное число ";
    while(!n)
    {
        n = getInt5Symbols();
        cout << " " << n << " это не 5-ти значное число. " << endl;
        cout << " Введите заново : " << endl;
    }
    // Работаем с 5-ти значным int
    return 0;
}
0
metaluga145
243 / 244 / 38
Регистрация: 08.04.2013
Сообщений: 927
29.10.2013, 16:53 #5
XRuZzz, вы в цикле используете n до того, как инициализировали его
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
29.10.2013, 16:57 #6
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
35
36
37
38
39
#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
#include <fstream>
 
using std::cin;
using std::cout;
using std::string;
using std::stringstream;
 
int getInt5Symbols()
{
    string in;
    int res;
    stringstream er;
    getline(cin, in);
    er << in;
    er >> res;
    if (res < 10000 && res > 99999) return 0;    // То что ввёл пользователь нам не нужно
    return res;
}
 
int main()
{   
    int n;
    cout << " Введите 5-ти значное число ";
    do
    {
        n = getInt5Symbols();
        if (!n)
        {
            cout << " " << n << " это не 5-ти значное число. " << endl;
            cout << " Введите заново : " << endl;
        }
    } while(!n);
    // Работаем с 5-ти значным int
    return 0;
}
0
bumbalalaxa
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
30.10.2013, 00:48  [ТС] #7
XRuZzz у меня твой код не работает даже после того как дописал using std::endl;
0
Shtirliz72
201 / 161 / 41
Регистрация: 25.10.2013
Сообщений: 527
30.10.2013, 01:09 #8
Цитата Сообщение от metaluga145 Посмотреть сообщение
как-то так
А зачем flag и чем стандартный break не угодил?

Добавлено через 3 минуты
Цитата Сообщение от XRuZzz Посмотреть сообщение
C++
1
2
3
4
5
6
string in;
* * int res;
* * stringstream er;
* * getline(cin, in);
* * er << in;
* * er >> res;
Зачем такие извращения? Чем стандартный ввод не угодил? :
C++
1
2
* * int res;
* * cin >> res;
Добавлено через 6 минут
Немного переделаю код XRuZzz:
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
#include <iostream>
#include <stdio.h>
 
using std::cin;
using std::cout;
 
bool getInt5Symbols(int &res)
{
    cout << " Введите 5-ти значное число: ";
    cin >> res;
    if (res < 10000 || res > 99999) {
          cout << " " << res << " это не 5-ти значное число. " << endl;
          return false;    // То что ввёл пользователь нам не нужно
    }
    return true;
}
 
int main()
{   
    int n;
    while (!getInt5Symbols(n)) 
        cout << " Введите заново : " << endl;
 
    // Работаем с 5-ти значным int
    return 0;
}
1
bumbalalaxa
0 / 0 / 0
Регистрация: 29.10.2013
Сообщений: 7
30.10.2013, 01:26  [ТС] #9
Shtirliz72 спасибо. все заработало. даже без труда понял как это делается.
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
30.10.2013, 09:59 #10
отладил:
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
35
36
37
38
39
40
41
42
#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
#include <fstream>
 
using std::cin;
using std::cout;
using std::endl;
using std::string;
using std::stringstream;
 
int getNumber()
{
    string in;
    int res;
    stringstream er;
    getline(cin, in);
    er << in;
    er >> res;
    return res;
}
 
int main()
{
    int n;
    cout << " Введите 5-ти значное число ";
    bool b;
    do
    {
        n = getNumber();
        b = (n < 10000 || n > 99999);
        if (b)
        {
            cout << " " << n << " это не 5-ти значное число. " << endl;
            cout << " Введите заново : " << endl;
        }
    } while(b);
    cout << " Поздравляю " << n << " 5-ти значное число" << endl;
    // Работаем с 5-ти значным int
    return 0;
}
Цитата Сообщение от Shtirliz72 Посмотреть сообщение
Зачем такие извращения? Чем стандартный ввод не угодил? :
а потом будете (все кто писал в этой теме) создавать по 20 тем в форуме: "а как мне парсить введенную пользователем строку", "а как ввести в программу цифры через пробел".

Тут даже cout из функции убран не просто так, а с предположением, что программа будет развиваться в долгом цикле.
2
Shtirliz72
201 / 161 / 41
Регистрация: 25.10.2013
Сообщений: 527
30.10.2013, 12:31 #11
Цитата Сообщение от XRuZzz Посмотреть сообщение
а потом будете (все кто писал в этой теме) создавать по 20 тем в форуме: "а как мне парсить введенную пользователем строку", "а как ввести в программу цифры через пробел".

Тут даже cout из функции убран не просто так, а с предположением, что программа будет развиваться в долгом цикле.
Это всё лишние извращения, которые в данном случае нафиг не нужны. Программа должна выполнять конкретную задачу, а не будущие фантазии.
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
30.10.2013, 13:23 #12
странно если добавляю в этот пример
объявление регулярки

C++
1
regex pat(R"(\w{2}\s?\d{5}(?\d{4})?)");
выбрасывает исключение

Добавлено через 1 минуту
Цитата Сообщение от Shtirliz72 Посмотреть сообщение
Программа должна выполнять конкретную задачу, а не будущие фантазии.
эти фантазии могут стать кошмаром

когда этот код начнёт решать хоть какую-нибудь полезную задачу, в ней появится обработка строки, которую вводит пользователь.
0
Shtirliz72
201 / 161 / 41
Регистрация: 25.10.2013
Сообщений: 527
30.10.2013, 13:29 #13
Цитата Сообщение от XRuZzz Посмотреть сообщение
эти фантазии могут стать кошмаром
Могут. Но они ведь на то фантазии и зовутся, что вероятность этого кошмара крайне невелика. В умных книжках советуют делать только то, что нужно и не растрачиваться зря по предложениям в виде ("а что если я в будущем добавлю это", "а что если мне в будущем придётся расширять то" - и тут же всё это, под будущее, реализовывать). Будущее имеет способность не сбываться и не реализовываться, оставаясь только в фантазиях, а вот время, потраченное на реализацию всех этих фишек и прочего, которые нафиг были не нужны и нафиг не нужны будут в будущем, - уже не вернёшь.

Добавлено через 4 минуты
И, кстати, как показывает практика, проще в будущем заново написать такую вещь под конкретную задачу, чем пытаться свой прошлый код, делавшийся для совсем другой задачи, сделать универсальным.
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
30.10.2013, 13:35 #14
Цитата Сообщение от Shtirliz72 Посмотреть сообщение
И, кстати, как показывает практика, проще в будущем заново написать такую вещь под конкретную задачу, чем пытаться свой прошлый код, делавшийся для совсем другой задачи, сделать универсальным.
тогда получается обобщенное программирование это полное зло
0
Shtirliz72
201 / 161 / 41
Регистрация: 25.10.2013
Сообщений: 527
30.10.2013, 13:46 #15
Цитата Сообщение от XRuZzz Посмотреть сообщение
тогда получается обобщенное программирование это полное зло
С чего бы? Главное умение проводить грань и понимать когда что нужно. Обычно это умение приходит с опытом и знаниями. А пытаться обобщить там, где это не надо - это явное зло.
0
XRuZzz
Антикодер
1489 / 647 / 36
Регистрация: 15.09.2012
Сообщений: 2,635
30.10.2013, 13:51 #16
абсолютно нужно один раз написать обработку строки, получаемой от пользователя, и пользоваться такой библиотекой всю оставшуюся жизнь во всех своих консольных приложениях.

Я этого не достиг в своём примере, но постепенное улучшение кода приведёт к этому.
0
Shtirliz72
201 / 161 / 41
Регистрация: 25.10.2013
Сообщений: 527
30.10.2013, 14:11 #17
Цитата Сообщение от XRuZzz Посмотреть сообщение
абсолютно нужно один раз написать обработку строки, получаемой от пользователя, и пользоваться такой библиотекой всю оставшуюся жизнь во всех своих консольных приложениях.

Я этого не достиг в своём примере, но постепенное улучшение кода приведёт к этому.
Хорошо, как достигните - код выложите, будет интересно заценить.
0
30.10.2013, 14:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.10.2013, 14:11
Привет! Вот еще темы с решениями:

Как зациклить ввод пока не будет введено одно из обрабатываемых значений?
Как сделать что бы если else (введено не 1 или 2) вывело текст &quot;неправильный...

Пользователь вводит числа, пока не будет введено 5 отрицательных значений
Доброе время суток!!! Подскажите, как можно решить такую задачку, применяю...

Пользователь вводит с клавиатуры числа, до тех пор пока не введено число 6
Пользователь вводит с клавиатуры числа, до тех пор пока не введено число 6....

Заполнять массив строк пока не будет введено слово "stop".
Проблема такая. Надо создать векторный массив с типа string. Пользователь...


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

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

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