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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 5.00
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 15:31     Защита ввода. #1
Как защитить размер матрицы от набора букв или символов?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2010, 15:31     Защита ввода.
Посмотрите здесь:

Защита от некорректного ввода C++
Защита от ввода букв C++
защита от ввода символов C++
Защита от ввода букв C++
Защита ввода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 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 ;
}
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;
}
У меня вот этой программе вылетает, когда вводим много цифр. Подскажи как сделать
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:19     Защита ввода. #4
используй теги кода.
Сделай пожалуйста правку сообщения.

Добавлено через 12 минут
kursant:
А какая реакция должна быть если пользователь ввел символ?
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:24  [ТС]     Защита ввода. #5
Чтобы пользователю выходило сообщение ввести ещё раз!
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:26     Защита ввода. #6
kursant:
Тогда я в твоём коде ковыряться не буду, сделаю по своему?
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);
Можете по своему...
Genius Ignat
1233 / 771 / 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 минуту
У меня просто компилятор другой версии. приходится переделывать, некоторые вещи.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:41  [ТС]     Защита ввода. #9
Большое спасибо за код, но что-то при вводе русских букв он выдает ошибку?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 18:48     Защита ввода. #10
Странно.
У меня всё норм.
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 18:53  [ТС]     Защита ввода. #11
я работаю в visul studio 2008 rus...
ошибка
Защита ввода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.02.2010, 15:59     Защита ввода.
Еще ссылки по теме:

Защита от некорректного ввода C++
Защита от некорректного ввода C++
Защита от некорректного ввода C++

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

Или воспользуйтесь поиском по форуму:
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
16.02.2010, 15:59  [ТС]     Защита ввода. #12
Привет. Можешь посмотреть пожалуйста мою ошибку7
Yandex
Объявления
16.02.2010, 15:59     Защита ввода.
Ответ Создать тему
Опции темы

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