Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
#1

Защита ввода. - C++

14.02.2010, 15:31. Просмотров 2256. Ответов 11
Метки нет (Все метки)

Как защитить размер матрицы от набора букв или символов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2010, 15:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Защита ввода. (C++):

Защита ввода - C++
Подскажите как осуществить защиту от неправильного ввода то есть если переменная типа int как сделать так что бы пользователь не мог ...

Защита от некорректного ввода - C++
Приветствую, помогите, пожалуйста, реализовать защиту от некорректного ввода. Должны быть допустимы только числовые значения. double...

Защита от некорректного ввода - C++
Помогите, пожалуйста, с защитой от некорректного ввода! Программа выполняет задания с помощью рекурсии. Хотел написать защиту на ввод...

Защита от некорректного ввода - C++
Помогите сделать так, что при вводе букв программа продолжала работать: запрещала ввод букв(только цифры) или просто не учитывала их. Как...

Защита от некорректного ввода - C++
Будьте добры, помогите написать защиту от дурака на ввод массива элементы которого тип float Буду очень благодарен.

Защита от некорректного ввода - C++
Здравствуйте! Нужно осуществить контроль при заполнении матрицы, если введены не корректные данные, вывести сообщение, и переспросить...

11
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:00 #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
#include <iostream.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
#define S_BUF 10
 
void main(){
char sizeB[S_BUF];
int  size(0);
 
unsigned int i;
for(i=0;i<S_BUF;i++)sizeB[i]='\0'; //инициализируем массив
 
cout<<"Input size\t";cin>>sizeB;   //ввод размер с помощью массива, ввести можно не больше чем 10 цифр
bool DIGIT = true;                 //для выяснения наличия цифр
 
for(i=0;i<strlen(sizeB);i++)
                            if(!isdigit(sizeB[i]))DIGIT = false;     //в цисле присутствует символ
 
//Если в ведённом масиве обнаружен символ
if(!DIGIT){
     cout<<"You input symbol: exit\n";return;
}
 
//иначе задаём размер массива
else { size = atoi(sizeB);         //конвертируем из массива в число.
cout<<"SIZE:\t"<<size<<'\n';       //выводим размер массива
}
//Целевой массив в твой программе естественно должен быть ниже этого фрагмента.
 
    return ;
}
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:04  [ТС] #3
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
// laba1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <limits>
 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{   int L(0),C(0), bad_input;   //размеры матриц
    int **matrix1 = NULL;
    int **matrix2 = NULL;
    do {bad_input=0;
    cout <<"Enter quantity of lines and columns:";
    cin >>L;
     if(!cin)
            {    
                cout << "Have not correctly entered!" << endl;
                bad_input=1;
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(),'\n');
            }
    }while(bad_input);
    C=L;
    //Выделяем память под три матрицы:
    matrix1 = new int*[L];
    for(int i=0;i<L;i++)matrix1[i]= new int[C];
    matrix2 = new int*[L];
    for(int i=0;i<L;i++)matrix2[i]= new int[C];
    //Заполняем две матрицы
    for(int i=0;i<L;i++)
    {   cout<<"matrix1:\n";
        for(int j=0;j<C;j++)
        {   
            cout<<"element "<<' '<<i<<' '<<j<<'\t';
            cin>>matrix1[i][j];
        }
        cout<<'\n';
    }
 
    cout<<'\n';
 
    for(int i=0;i<L;i++)
    {   cout<<"matrix2:\n";
        for(int j=0;j<C;j++)
        {   
            
            cout<<"element "<<' '<<i<<' '<<j<<'\t';cin>>matrix2[i][j];
        }
        cout<<'\n';
    }
 
    //Показываем на экран матрицы
 
    for(int i=0;i<L;i++)
    {
        for(int j=0;j<C;j++)
        {
            cout<<' '<<matrix1[i][j];
        }
        cout<<'\n';
    }
 
    cout<<'\n';
 
    for(int i=0;i<L;i++)
    {
        for(int j=0;j<C;j++)
        {
            cout<<' '<<matrix2[i][j];
        }
        cout<<'\n';
    }
 
    cout<<'\n';
    getchar();
    cout <<"Press key to end...";
    //Освобождаме память из под трёх матриц
    for(int i = 0;i<L;i++)delete[]matrix1[i];
    delete[]matrix1;
    for(int i = 0;i<L;i++)delete[]matrix2[i];
    delete[]matrix2;
    getchar();
    return 0;
}
У меня вот этой программе вылетает, когда вводим много цифр. Подскажи как сделать
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:19 #4
используй теги кода.
Сделай пожалуйста правку сообщения.

Добавлено через 12 минут
kursant:
А какая реакция должна быть если пользователь ввел символ?
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:24  [ТС] #5
Чтобы пользователю выходило сообщение ввести ещё раз!
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:26 #6
kursant:
Тогда я в твоём коде ковыряться не буду, сделаю по своему?
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:28  [ТС] #7
У меня вот идёт проверка введеного числа
C++
1
2
3
4
5
6
7
8
if(!cin)
            {    
                cout << "Have not correctly entered!" << endl;
                bad_input=1;
                cin.clear();
                cin.ignore(numeric_limits<streamsize>::max(),'\n');
            }
        }while(bad_input);
Можете по своему...
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:36 #8
Пробуй.
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
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
 
#define S_BUF 10
 
int main()
{     
int EXIT = 0;
char sizeB[S_BUF];
int size(0);
 
while(EXIT==0){  
unsigned int i;
for(i=0;i<S_BUF;i++)sizeB[i]='\0'; //инициализируем массив
 
cout<<"Input size\t";cin>>sizeB;   //ввод размер с помощью массива, ввести можно не больше чем 10 цифр
bool DIGIT = true;                 //для выяснения наличия цифр
 
for(i=0;i<strlen(sizeB);i++)
                            if(!isdigit(sizeB[i]))DIGIT = false;     //в цисле присутствует символ
//Если в ведённом масиве обнаружен символ
if(!DIGIT){
         cout<<"You input symbol: \n";
         EXIT=0;
}
 
//иначе задаём размер массива
else { size = atoi(sizeB);         //конвертируем из массива в число.
cout<<"SIZE:\t"<<size<<'\n';       //выводим размер массива
EXIT=1;
}
 
}
 
//Целевой массив в твой программе естественно должен быть ниже этого фрагмента.
    
int L(0),C(0);
L = size;
C=L;
 
        int **matrix1 = NULL;
        int **matrix2 = NULL;
  
 
 
        C=L;
        //Выделяем память под три матрицы:
        int i;
        matrix1 = new int*[L];
        for(i=0;i<L;i++)matrix1[i]= new int[C];
        matrix2 = new int*[L];
        for(i=0;i<L;i++)matrix2[i]= new int[C];
        //Заполняем две матрицы
        for(i=0;i<L;i++)
        {       cout<<"matrix1:\n";
        for(int j=0;j<C;j++)
                {       
                        cout<<"element "<<' '<<i<<' '<<j<<'\t';
                        cin>>matrix1[i][j];
        }
                cout<<'\n';
        }
 
        cout<<'\n';
 
        for(i=0;i<L;i++)
        {       cout<<"matrix2:\n";
        for(int j=0;j<C;j++)
                {       
                        
                        cout<<"element "<<' '<<i<<' '<<j<<'\t';cin>>matrix2[i][j];
        }
                cout<<'\n';
        }
 
        //Показываем на экран матрицы
 
        for(i=0;i<L;i++)
        {
        for(int j=0;j<C;j++)
                {
                        cout<<' '<<matrix1[i][j];
        }
                cout<<'\n';
        }
 
        cout<<'\n';
 
        for(i=0;i<L;i++)
        {
        for(int j=0;j<C;j++)
                {
                        cout<<' '<<matrix2[i][j];
        }
                cout<<'\n';
        }
 
 
        cout<<'\n';
 
 
        //Освобождаме память из под трёх матриц
        for(i = 0;i<L;i++)delete[]matrix1[i];
        delete[]matrix1;
        for(i = 0;i<L;i++)delete[]matrix2[i];
        delete[]matrix2;
 
 return 0;
}
Добавлено через 1 минуту
У меня просто компилятор другой версии. приходится переделывать, некоторые вещи.
1
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:41  [ТС] #9
Большое спасибо за код, но что-то при вводе русских букв он выдает ошибку?
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:48 #10
Странно.
У меня всё норм.
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:53  [ТС] #11
я работаю в visul studio 2008 rus...
ошибка
Защита ввода.
1
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
16.02.2010, 15:59  [ТС] #12
Привет. Можешь посмотреть пожалуйста мою ошибку7
0
16.02.2010, 15:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2010, 15:59
Привет! Вот еще темы с ответами:

Защита от неправильного ввода - C++
Приветствую, делаю контрольную работу по программированию, основное задание сделал, но вот решил добавить защиту от неправильного ввода, но...

Защита от ввода символов - C++
есть код в котором я ввожу цифры нужно сделать что бы через консоль я не могу вводить больше ничего другого кроме цифр возможно такое...

Защита от ввода букв - C++
Нужно в программу вставить защиту от ввода букв. Что то у меня не получается. (В программе вводится только цифра) #include...

Защита от ввода букв - C++
Всем привет. Необходимо сделать защиту от ввода букв. числа не больше 40. int size; do { printf(&quot;\nВведите размер массива...


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

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

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