Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 17.12.2019
Сообщений: 6
1

Форматированный ввод

17.12.2019, 01:44. Показов 951. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, подскажите, пожалуйста, возможно ли сделать так, чтобы при вводе пользователя букв, не входящих в 16 сс, программа не падала, а можно было заново ввести число? Строки 35-39
Например, при вводе z у меня бесконечно выводится строчка "Вы ввели неподходящее число, введите другое число", а нужно, чтобы можно было повторно вводить число до тех пор, пока оно действительно не будет являться числом в 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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <time.h>
#include <string>
#include <cstdlib>
 
using namespace std;
 
int main()
{
setlocale(0, "");
    
int a[4][4], c = 0, tmp = 0;
    string input;
 
srand(time_t(NULL));
cout << "Выберите способ заполнения матрицы, 1 - вручную, 2 - случайными числами" << endl;
getline (cin, input);
c = atoi(input.c_str());
    
    while ((c != 2) && (c != 1))
    {
        cout << "Такого способа заполнения нет, пожалуйста, попробуйте еще раз" << endl;
        getline(cin, input);
        c = atoi(input.c_str());
    }
    
switch (c)
{
case 1:
        cout << "Введите 16 элементов массива" << endl;
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                cin >> hex >> a[i][j];
                while (a[i][j] == 0)
                {
                    cout << "Вы ввели неподходящее число, введите другое число" << endl;
                    cin >> hex >> a[i][j];
                }
            }
        }
        break;
case 2:
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                a[i][j] = rand() % 255 + 16;
            }
        }
        break;
}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2019, 01:44
Ответы с готовыми решениями:

форматированный ввод
Есть строка вида: поле1\t поле2\tполе3\tполе4\n Обрабатываю её так: sscanf(Line, &quot;%\t%\t%\t%\n&quot;,...

Форматированный ввод
Доброго времени суток. Разрабатываю класс 'дроби'. Хочу сделать форматированный ввод с консоли. То...

форматированный ввод\вывод
Задача форматировано сохранять объект(ы) в файле. Потом вывести все содержимое файла. Подскажите...

Форматированный ввод и вывод
Создание таблицы квадратных корней и квадратов от -5 до 10 После этого выведите все числа на экран...

6
2456 / 1061 / 481
Регистрация: 17.11.2018
Сообщений: 2,740
17.12.2019, 03:50 2
aladdin120, попробуй так:
Кликните здесь для просмотра всего текста
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
int main()
{
    setlocale( 0, "" );
 
    int a[4][4] = { 0 }, c = 0;
    char ch = 0;
 
    srand( ( unsigned )time( NULL ) );
    cout << "Выберите способ заполнения матрицы, 1 - вручную, 2 - случайными числами" << endl;
    while( ch != '\r' || !c )
    {
        ch = _getch();
        if( ch == '1' || ch == '2' )
        {
            cout << ch;
            c = ch - '0';
            break;
        }
    }
 
    ch = 0;
    switch( c )
    {
        case 1:
            cout << "\nВведите 16 элементов массива:" << endl;
            for( int i = 0; i < 4; i++ )
            {
                for( int j = 0; j < 4; j++ )
                {
                    ch = _getch();
                    if( isdigit( ch ) )
                    {
                        a[i][j] = ch - '0';
                        cout << a[i][j] << ' ';
                    }
                    else if( ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f' )
                    {
                        a[i][j] = toupper(ch);
                        cout << ( char )a[i][j] << ' ';
                    }
                    else
                        j--;
                }
                cout << endl;
            }
            break;
        case 2:
            cout << endl;
            for( int i = 0; i < 4; i++ )
            {
                for( int j = 0; j < 4; j++ )
                {
                    a[i][j] = rand() % 255 + 16;
                    cout << setw ( 4 ) << a[i][j];
                }
                cout << endl;
            }
            break;
    }
}
0
0 / 0 / 0
Регистрация: 17.12.2019
Сообщений: 6
17.12.2019, 11:58  [ТС] 3
Спасибо за ответ!
Но проблема в том, что мне необходимо, чтобы пользователь мог вводить только двузначные цифры 16сс, у вас получаются только однозначные(
0
2456 / 1061 / 481
Регистрация: 17.11.2018
Сообщений: 2,740
17.12.2019, 12:08 4
Цифр двузначных не бывает, они все однозначные.
0
0 / 0 / 0
Регистрация: 17.12.2019
Сообщений: 6
17.12.2019, 12:30  [ТС] 5
analogov net, имел ввиду числа)
0
2456 / 1061 / 481
Регистрация: 17.11.2018
Сообщений: 2,740
17.12.2019, 14:03 6
aladdin120, с числами немного больше повозиться нужно, но тоже, не критично... Сейчас нет времени на это дело. попробуй сам поработать напильником, если тебе интересно, конечно.
Буквально, пару дней назад была похожая тема, там нужно было вводить часы, минуты и секунды. И тоже, без лишних символов. Кстати, двухзначные. Посмотри там, может быть поможет. Вот ссылка: Ввод чисел с проверкой на наличие сторонних символов

Добавлено через 8 минут
Там, даже, есть возможность редактирования при ошибочном вводе.
0
0 / 0 / 0
Регистрация: 17.12.2019
Сообщений: 6
17.12.2019, 20:28  [ТС] 7
analogov net, спасибо большое)
0
17.12.2019, 20:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2019, 20:28
Помогаю со студенческими работами здесь

Форматированный ввод-вывод
Доброго времени суток. Только начал постигать С++, как столкнулся с проблемой. В универе преподают...

Форматированный ввод/вывод
Ребят , подскажите пожалуйста как правильно пользоваться флагами форматирования вывода. Допустим...

Форматированный ввод/вывод в файл
подскажите как читать из файла или писать в файл например int ( не используя при этом fprintf &amp;...

Форматированный ввод/вывод с использованием текстовых файлов
ЗДРАВСТВУЙТЕ. МЕНЯ ЗОВУТ ДАША. У МЕНЯ ПРОБЛЕМА, Я НЕ ЧЕГО НЕ ПОНИМАЮ В С++, А У МЕНЯ ЗАЧЕТ, МОЖЕТ...

форматированный вывод
Всем, здрасте! У меня вопрос, как сделать вывод линии перед цифрами? (длина линии зависит от...

Форматированный вывод
Написать код, который позволит скомпилировать следующую строку cout &lt;&lt; toUpper &lt;&lt; “абвгд”; Как...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru