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

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

Войти
Регистрация
Восстановить пароль
 
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 729
#1

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

11.11.2013, 11:51. Просмотров 258. Ответов 8
Метки нет (Все метки)

Объясните пожалуйста почему работает программа у нас ведь массив 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2013, 11:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему в массив из двух элементов можно ввести третье значение? (C++):

Можно ли ввести с помощью std::cin значения элементов двух массивов? - C++
Скажите можно ли вести с помощью cin два массива? Я начал вот делать, но почему то водится только один массив.Что может тут быть...

среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых - C++
среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых

Как сделать из двух чисел третье, уникальное для любой комбинации первых двух? - C++
Hi :) Есть два числа, допустим: int a и int b, как можно их &quot;сопряч&quot;, то есть что - то с ними сделать, что бы получить третье число,...

Указатели на указатели с числами. Почему можно присвоить число в 4-ый элемент, если массив из 2 элементов? - C++
Есть массив int **mas; mas=new int*; // выделил место под пять строк, верно ? mas=new int;// выделил для первой строки матрицы два...

дан массив. Если ввести 2 целых числа, то массив в диапазоне между этими числами приобретет максимальное значение массива - C++
дан массив. Если ввести 2 целых числа, то массив в диапазоне между этими числами приобретет максимальное значение массива. Как найти...

Ввести одномерный массив из n элементов. Определить число различных элементов в нем - C++
Возникла небольшая проблема. Нужно сделать элементарное задание, но чтобы было несколько функций пользователя. Задание: Ввести одномерный...

8
Folko
265 / 253 / 7
Регистрация: 27.09.2013
Сообщений: 877
Записей в блоге: 1
11.11.2013, 12:01 #2
NEvOl, в с++ не контролируется выход за границы массивов. То есть вы int a[2]; a[2] = 3; будет означать что вы запишите значение вне массива
0
SatanaXIII
Супер-модератор
Эксперт С++
5639 / 2674 / 252
Регистрация: 01.11.2011
Сообщений: 6,571
Завершенные тесты: 1
11.11.2013, 12:03 #3
Цитата Сообщение от NEvOl Посмотреть сообщение
массив us из 2-х элементов а он позволяет ввести 3-его?
Массив это указатель на зарезервированную под него область памяти. Но по этому указателю вы без проблем можете записать и за пределы отведенной памяти. Вы сами должны контролировать этот момент.
0
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 729
11.11.2013, 12:04  [ТС] #4
но если я ввожу 4-ый раз кидает исключение а на 3-ем разе не кидает...
0
SatanaXIII
Супер-модератор
Эксперт С++
5639 / 2674 / 252
Регистрация: 01.11.2011
Сообщений: 6,571
Завершенные тесты: 1
11.11.2013, 12:05 #5
Цитата Сообщение от NEvOl Посмотреть сообщение
но если я ввожу 4-ый раз кидает исключение а на 3-ем разе не кидает...
0
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 729
11.11.2013, 12:23  [ТС] #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А если серьезно ?
0
JleLLlka
0 / 0 / 0
Регистрация: 11.11.2013
Сообщений: 3
11.11.2013, 12:28 #7
Цитата Сообщение от NEvOl Посмотреть сообщение
А если серьезно ?
А если серьезно, то звезды на небе сошлись таким образом, что четвертым разом ты изменяешь критичную область памяти и программа ломается. Иногда можно и на 1000 элементов вылезти, и программа не сломается, но ты изменишь "чужие" данные, а бывает и с первого элемента вылетет.
0
NEvOl
19 / 18 / 0
Регистрация: 13.08.2012
Сообщений: 729
11.11.2013, 12:43  [ТС] #8
я пишу в visual studio там вроде была какая-то функция в настройках которая отслеживала выход за пределы, или я ошибаюсь ?
0
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,036
11.11.2013, 12:53 #9
Цитата Сообщение от NEvOl Посмотреть сообщение
я пишу в visual studio там вроде была какая-то функция в настройках которая отслеживала выход за пределы, или я ошибаюсь ?
о существовании таковой не знаю, но скажу, что лучше следить за этим самому, тем более если учишься
0
11.11.2013, 12:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 12:53
Привет! Вот еще темы с ответами:

Ввести массив А из 10 элементов,найти произведение отрицательных элементов и вывести на экран - C++
Ввести массив А из 10 элементов,найти произведение отрицательных элементов и вывести на экран. Можно полный код.

Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива - C++
Помогите написать код, пожалуйста Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива

Ввести массив из 10 элементов, найти произведение элементов массива. - C++
Ввести массив из 10 элементов, найти произведение элементов массива.

Как с консоли можно ввести двумерный массив строчных символов? - C++
Например, есть char str ; Как можно ввести 2 строки? И будет ли символ ‘\0’ в конце каждой строки или только в одной?


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

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

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