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

Обработка ошибки ввода чисел

31.10.2019, 10:46. Показов 1646. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста, как сделать повторный ввод в случае ошибки: 1) Если вместо количества строк и столбцов(m,n,k) вводятся с клавиатуры не числа или вводятся не натуральные числа 2) Если при вводе элементов матрицы с клавиатуры вводятся не числа, а другие символы? По условию умножаются матрицы A(m,n) и B(n,k). Результатом является матрица C(m,k)=A∙B. Значения m, n, k вводится с клавиатуры. Создаётся меню для выбора способа задания значений элементов матриц: ввод матриц пользователем с клавиатуры либо формирование их программой случайным образом.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
void Random(double** x, int N, int M)
{
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            x[i][j] = rand() % 9 + 1;
}
 
void Set(double** x, int N, int M)
{
    cout << "Enter " << N * M << " elements:\n";
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            cin >> x[i][j];
    if (cin.fail())
        cout << "Error! Not a digit. Input again\n" << endl;
       ....................................
       ...................................
    
}
 
void Print(double** x, int N, int M)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            cout << x[i][j] << " ";
        cout << "\n";
    }
}
 
int main()
{
    srand((int)time(0));
    int m, n, k, choice;
    cout << "m="; cin >> m;
    cout << "n="; cin >> n;
    cout << "k="; cin >> k;
    if (cin.fail())
        cout << "Error! Not a digit. Input again\n" << endl;
    else if (m <= 0 && n <= 0 && k <= 0)
        cout << "Error! Not a natural digit! Input again" << endl;
       ....................................................
       ...................................................
     
    double** A = new double* [m];
    for (int i = 0; i < m; i++)
        A[i] = new double[n];
 
    double** B = new double* [n];
    for (int i = 0; i < n; i++)
        B[i] = new double[k];
 
    double** C = new double* [m];
    for (int i = 0; i < m; i++)
        C[i] = new double[k];
 
    do
    {
        cout << "Make a choice: 1 - Random, 2 - Keyboard: ";
        cin >> choice;
        if (choice == 1) { Random(A, m, n);Random(B, n, k); }
        else if (choice == 2) { Set(A, m, n);Set(B, n, k); }
        else cout << "ENTER ERROR !!! Repeat please...\n";
    } while (choice != 1 && choice != 2);
 
    for (int i = 0; i < m; i++)
    {
        for (int j = 0; j < k; j++)
        {
            C[i][j] = 0;
            for (int k = 0; k < n; k++)
                C[i][j] += A[i][k] * B[k][j];
        }
    }
 
    cout << "Matrix A:\n";
    Print(A, m, n);
    cout << "Matrix B:\n";
    Print(B, n, k);
    cout << "Matrix C:\n";
    Print(C, m, k);
 
    for (int i = 0; i < m; i++)
        delete[]A[i];
    delete[]A;
    for (int i = 0; i < n; i++)
        delete[]B[i];
    delete[]B;
    for (int i = 0; i < m; i++)
        delete[]C[i];
    delete[]C;
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.10.2019, 10:46
Ответы с готовыми решениями:

DatagridView-обработка ошибки ввода
Добрый день! Возникло два вопроса: 1) Данные вносятся через DatagridView (Связка...

Обработка ошибки ввода Edit
Подскажите пожалуйста, есть код на обработку ошибки если значение в edit1 больше чем в DBEdit1 то...

Из ввода дана непустая последовательность из “n” вещественных чисел (n задается из ввода), за которой следует 0. Определить количество чисел
13. Из ввода дана непустая последовательность из “n” вещественных чисел (n задается из ввода), за...

Контроль ввода даты и выдача сообщения в случае ошибки неверного ввода
Здравствуйте! У меня есть такая вот форма(скрин ниже). Смысл в том, что если пользователь введет...

2
43 / 39 / 5
Регистрация: 16.09.2019
Сообщений: 285
31.10.2019, 12:46 2
Цитата Сообщение от q34 Посмотреть сообщение
Подскажите, пожалуйста, как сделать повторный ввод в случае ошибки:
do-while тебе поможет, а как конкретно - твое дело.
Смысл: на каждый(!) ввод данных делать проверку и при негативном ее прохождении требовать ввести заново.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
31.10.2019, 12:54 3
Цитата Сообщение от q34 Посмотреть сообщение
Подскажите, пожалуйста, как сделать повторный ввод в случае ошибки: 1) Если вместо количества строк и столбцов(m,n,k) вводятся с клавиатуры не числа или вводятся не натуральные числа 2) Если при вводе элементов матрицы с клавиатуры вводятся не числа, а другие символы?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        int x = 0;
 
        for (;;)
        {
            std::cin >> x;
            if (std::cin.good())
                break;
 
            std::cout << "fail!" << std::endl;
            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }
 
        std::cout << "OK: " << x << std::endl;
2
31.10.2019, 12:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2019, 12:54
Помогаю со студенческими работами здесь

Контроль ввода даты в MaskEdit и выдача сообщения в случае ошибки неверного ввода
Всем доброго дня! Использую MaskEdit для ввода даты формат: dd/mm/yyyy Помогите написать...

При повторном появлении ошибки обработка ошибки не срабатывает
Логика: - Пользователь. Нажимает кнопку; - Код . Создаёт &quot;Recordset&quot; &quot;rstStud&quot;(студенты) и...

Исключение IOException, которое появляется при ввода буквенного символа в методе ввода с клавиатуры целых чисел
Ввожу в catch IOException, а не нравится, что делать? import java.io.IOException; import...

С клавиатуры вводится N целых чисел a1, a2,….,aN. Найти сумму этих чисел. Вывести на экран в процессе ввода чисел: a1+a2, a2+a3, …. aN-1+aN
Помогите, пожалуйста! Решить задачу 3 способами: 1. Используя метки и оператор goto (не...


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

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