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

Почему в массив из двух элементов можно ввести третье значение? - C++

Восстановить пароль Регистрация
 
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
11.11.2013, 11:51     Почему в массив из двух элементов можно ввести третье значение? #1
Объясните пожалуйста почему работает программа у нас ведь массив us из 2-х элементов а он позволяет ввести 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <iostream>
#include <stdlib.h>
 
using namespace std;
 
int length(char a[128])
 {
     int k=0,i=0;
     while(a[i]!='\0')
     {
         k++;
         i++;
     }
 
     return i;
 }
 
bool stri(char a[128], char b[128])
 {
     int i=0;
     bool x=false;
     for (i=0; i<length(a); i++)
     {
            if (a[i]==b[i]&&length(a)==length(b))
                x=true;
            else
            {
                return x=false;
            }
     }
     return x;
 }
 
bool sec(char a[129])
{
    bool x=false;
    for (int i=0; i<length(a); i++)
    {
        int j=a[i];
        if(a[i]>48 && a[i]<58 || a[i]>64 && a[i]<91 || a[i]>96 && a[i]<123)
            x=true;
        else 
            return x=false;
    }
    return x;
}
 
 void main()
{
struct user
{
    char nic[128];
    char pas[128];
};
user us[2];
char n[128],p[128], i,z;
int j=0,k,t,s,q=0;
bool x=false,r=0,f=false, e=true;
while (x==false)
{
    cout<<"1)Registraciya\n2)Vxod\n3)Exit\n";//Меню
    cin>>i;
    if (i=='1')//Регитрация
    {
        if (j<3)
        {   
            r=false;
            f=false;
            while(f==false)
            {
            cout<<"Vvedite login\n";
            cin>>us[j].nic;
            f=sec(us[j].nic);
            if (f==false)
                cout<<"Necorectnii login, Iscluhite znaki\n";
            }
            f=false;
            if (j!=0)
            {
                for (s=0; s<j; s++)
                {
                    if (stri(us[s].nic, us[j].nic))//Проверка повторяемости логинов 
                    {
                        cout<<"Povtorenie loginov\n";
                        r=true;
                        break;
                    }
                }
            }
            if(r==false)
            {
                while (f==false)
                {
                cout<<"Vvedite pas\n";
                cin>>us[j].pas;
                f=sec(us[j].pas);
                if (f==false)
                    cout<<"Necorectnii pas, Iscluhite znaki\n";
                }
                j++;
                
            }
        }
        else
            cout<<"Basa danih zapolnena\n";
    }
    
    else if(i=='2')//Вход
    {
        cout<<"Vvedite login\n";
        cin>>n;
        for (k=0; k<3; k++)
        {   
            if (stri(us[k].nic, n))
            {
                cout<<"vernii login\n";
                for (t=0; t<3; t++)
                {
                    cout<<"Vvedite pas\n";
                    cin>>p;
                    if (stri(us[k].pas,p))
                    {
                        cout<<"Vhod vipolnen\n";
                        break;
                    }
                    else
                        cout<<"Nevernii parol\n";
                }
            }
            else e=false;
        }
        if (e==false) cout<<"Login ne naiden\n";
    }
    else if(i=='3')//Выход
        x=true;
    else cout<<"Error\n";
    cin>>z;
    system("cls");
}
cin>>z;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 11:51     Почему в массив из двух элементов можно ввести третье значение?
Посмотрите здесь:

Как с консоли можно ввести двумерный массив строчных символов? C++
даны два слова. получить третье слово из двух C++
C++ Ввести массив из 10 элементов, найти произведение элементов массива.
C++ дан массив. Если ввести 2 целых числа, то массив в диапазоне между этими числами приобретет максимальное значение массива
C++ среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Folko
 Аватар для Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
11.11.2013, 12:01     Почему в массив из двух элементов можно ввести третье значение? #2
NEvOl, в с++ не контролируется выход за границы массивов. То есть вы int a[2]; a[2] = 3; будет означать что вы запишите значение вне массива
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
11.11.2013, 12:03     Почему в массив из двух элементов можно ввести третье значение? #3
Цитата Сообщение от NEvOl Посмотреть сообщение
массив us из 2-х элементов а он позволяет ввести 3-его?
Массив это указатель на зарезервированную под него область памяти. Но по этому указателю вы без проблем можете записать и за пределы отведенной памяти. Вы сами должны контролировать этот момент.
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
11.11.2013, 12:04  [ТС]     Почему в массив из двух элементов можно ввести третье значение? #4
но если я ввожу 4-ый раз кидает исключение а на 3-ем разе не кидает...
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
11.11.2013, 12:05     Почему в массив из двух элементов можно ввести третье значение? #5
Цитата Сообщение от NEvOl Посмотреть сообщение
но если я ввожу 4-ый раз кидает исключение а на 3-ем разе не кидает...
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
11.11.2013, 12:23  [ТС]     Почему в массив из двух элементов можно ввести третье значение? #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А если серьезно ?
JleLLlka
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 3
11.11.2013, 12:28     Почему в массив из двух элементов можно ввести третье значение? #7
Цитата Сообщение от NEvOl Посмотреть сообщение
А если серьезно ?
А если серьезно, то звезды на небе сошлись таким образом, что четвертым разом ты изменяешь критичную область памяти и программа ломается. Иногда можно и на 1000 элементов вылезти, и программа не сломается, но ты изменишь "чужие" данные, а бывает и с первого элемента вылетет.
NEvOl
12 / 11 / 0
Регистрация: 13.08.2012
Сообщений: 616
11.11.2013, 12:43  [ТС]     Почему в массив из двух элементов можно ввести третье значение? #8
я пишу в visual studio там вроде была какая-то функция в настройках которая отслеживала выход за пределы, или я ошибаюсь ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 12:53     Почему в массив из двух элементов можно ввести третье значение?
Еще ссылки по теме:

Ввести одномерный массив из n элементов. Определить число различных элементов в нем C++
Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива C++
Как сделать из двух чисел третье, уникальное для любой комбинации первых двух? C++

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

Или воспользуйтесь поиском по форуму:
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
11.11.2013, 12:53     Почему в массив из двух элементов можно ввести третье значение? #9
Цитата Сообщение от NEvOl Посмотреть сообщение
я пишу в visual studio там вроде была какая-то функция в настройках которая отслеживала выход за пределы, или я ошибаюсь ?
о существовании таковой не знаю, но скажу, что лучше следить за этим самому, тем более если учишься
Yandex
Объявления
11.11.2013, 12:53     Почему в массив из двух элементов можно ввести третье значение?
Ответ Создать тему
Опции темы

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