Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 15
1

Закрытие консоли во время выполнения программы

17.12.2015, 20:17. Показов 3802. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Консоль закрывается до того, как выполнится вся программа. В коде написаны комментарии и место, после которого операторы не выполняются и консоль закрывается.

Код:
Кликните здесь для просмотра всего текста
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
 
namespace ConsoleApplication1
{
    class Program
    {
 
        static void Main(string[] args)
        {
 
 
            string[] Users = new string[6]; //Пользователи
            Users[0] = "Павел";
            Users[1] = "Артём";
            Users[2] = "Гость";
            Users[3] = "Admin";
            Users[4] = "Екатерина";
            Users[5] = "Ольга";
 
 
            object[,] Objects = new object[6, 4]; // Массив Объектов и прав доступа к ним
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    switch (i)
                    {
                        case 0: //Пользователь с id = 0
                            switch (j)
                            {
                                case 0:
                                    Objects[i, j] = "Полные права";
                                    break;
                                case 1:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 2:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 3:
                                    Objects[i, j] = "Запись";
                                    break;
                            }
                            break;
                        case 1:  //Пользователь с id = 1
                            switch (j)
                            {
                                case 0:
                                    Objects[i, j] = "Полные права";
                                    break;
                                case 1:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 2:
                                    Objects[i, j] = "Передача прав";
                                    break;
                                case 3:
                                    Objects[i, j] = "Запись";
                                    break;
                            }
                            break;
                        case 2: //Пользователь с id = 2
                            switch (j)
                            {
                                case 0:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 1:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 2:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 3:
                                    Objects[i, j] = "Чтение";
                                    break;
                            }
                            break;
                        case 3:
                            switch (j)
                            {
                                case 0:
                                    Objects[i, j] = "Полные";
                                    break;
                                case 1:
                                    Objects[i, j] = "Полные";
                                    break;
                                case 2:
                                    Objects[i, j] = "Полные";
                                    break;
                                case 3:
                                    Objects[i, j] = "Полные";
                                    break;
                            }
                            break;
                        case 4:
                            switch (j)
                            {
                                case 0:
                                    Objects[i, j] = "Полные права";
                                    break;
                                case 1:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 2:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 3:
                                    Objects[i, j] = "Запись";
                                    break;
                            }
                            break;
                        case 5:
                            switch (j)
                            {
                                case 0:
                                    Objects[i, j] = "Полные права";
                                    break;
                                case 1:
                                    Objects[i, j] = "Передача прав";
                                    break;
                                case 2:
                                    Objects[i, j] = "Чтение";
                                    break;
                                case 3:
                                    Objects[i, j] = "Чтение";
                                    break;
                            }
                            break;
 
                    }
                }
            }
            /*for (int i = 0; i < 6; i++)
            {
                Console.WriteLine();
                Console.WriteLine("-------------------------------------------------");
                Console.WriteLine("Пользователь с id " + i);
                Console.WriteLine();                
                for (int j = 0; j < 4; j++)
                {
                    Console.Write("Об. " + j + ": " + Objects[i, j] + "; ");
                    
                }
            }
            Console.ReadLine();*/
            string name;
            int id = 999;
            while (id == 999)
            {
                Console.WriteLine("Введите Ваше имя пользователя: ");
                name = Console.ReadLine();
                for (int i = 0; i < Users.Length; i++) //Выясняю id пользователя по имени
                {
                    if (name == Users[i])
                    {
                        id = i;
                    }
                }
                if (id == 999)
                {
                    Console.WriteLine("Такого пользователя не существует. Попробуйте снова...");
                }
            }
            Console.WriteLine("Ваш id: " + id);
            Console.Read();
            Console.WriteLine("Ваши права: ");
            for (int j = 0; j < 4; j++) // Вывод прав на объекты для конкретного пользователя
            {
                Console.Write("Объект:" + j + " - ");
                Console.Write(Objects[id, j]);
                Console.WriteLine("; ");
            }
            Console.WriteLine("Жду указаний: (действие)"); // Дальше операторы не выполняются - закрывается консоль
            string cmd = Console.ReadLine(); 
            switch (cmd) // не завершено - проверка прав на действия с объектом
            {
                case "read":
                    Console.WriteLine("Вы выбрали чтение объекта. Введите номер.");
                    Console.ReadLine();
                    break;
                case "write":
                    Console.WriteLine("Вы выбрали запись объекта. Введите номер.");
                    Console.ReadLine();
                    break;
                case "get_rights":
                    Console.WriteLine("Вы выбрали передачу прав. Введите номер объекта и имя пользователя.");
                    Console.ReadLine();
                    break;
 
 
            }
        }
 
    }
}


Ну и второстепенно - какие-нибудь комментарии к коду может будут.
Задача: Реализовать программное заполнение матрицы доступа, содержащей количество пользователей и объектов. Также может проводиться идентификация пользователя и вывод ему его прав на объекты. Наверное стоит переделать матрицу доступа в виде числовых идентификаторов прав, а там уже выводить название права по его ключу.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2015, 20:17
Ответы с готовыми решениями:

Задержать закрытие окна консоли после выполнения программы
Какой командой задержать экран C++ после выполнения программы, а то он сразу исчезает.

Результат выполнения программы в консоли пропадает после выполнения скрипта
нужно отпарсить файл , но мне надо видеть что выводит сценарий , иначе мне его неотладить....

Закрытие программы после выполнения кода
Добрый день. Есть код: w=0.5:0.001:10; p=%i*w; function z=W(p) ...

Остановить закрытие консоли по завершению работы программы
Работая на вижуал студие.Проблемы с getch менял на system pause,ничерта... #include &quot;stdafx.h&quot;...

10
115 / 92 / 66
Регистрация: 27.04.2014
Сообщений: 307
17.12.2015, 20:43 2
Console.ReadLine(); нужно добавить в самом низу
0
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 15
17.12.2015, 22:22  [ТС] 3
Так вроде не в этом дело. Не исполняется даже string cmd = Console.ReadLine(); То есть я не могу ввести команду и соответственно дальше обработать её. Консоль закрывается после выполнения 179-й строки программы.
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
17.12.2015, 22:36 4
Если бы я был консолью, я бы закрылся где-то строке на 31-й, отказавшись выполнять циклы со switch'ами
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 15
17.12.2015, 22:39  [ТС] 5
Буду рад увидеть конструктивные советы по поводу решения описанной в шапке задачи и исправления написанного в программе. Пока только осваиваюсь. Какое решение возникло в голове такое и написал..
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
17.12.2015, 22:57 6
Ну, например, строки 26-138 можно смело заменить на
C#
1
2
3
4
5
6
string[,] rights = {    {"Полные права", "Чтение", "Чтение", "Запись"},
                        {"Полные права", "Чтение", "Передача прав", "Запись"}, 
                        {"Чтение", "Чтение", "Чтение", "Чтение"},
                        {"Полные права", "Полные права", "Полные права", "Полные права"},
                        {"Полные права", "Чтение", "Чтение", "Запись"},
                        {"Полные права", "Полные права", "Чтение", "Чтение"} };
0
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 15
17.12.2015, 23:20  [ТС] 7
Так и правда короче. А по поводу преждевременного закрытия консоли ничего сказать не можете? Запускал без дебага: "ctrl+F5" - после вывода "Жду указаний: (действие)" - предлагает нажать любую кнопку, после нажатия закрывается. VS 2015.

Добавлено через 9 минут
Удалил 171 строку. С Console.Read();
Теперь всё работает нормально. Странно. Как этот оператор мог повлиять?
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
17.12.2015, 23:50 8
Лучший ответ Сообщение было отмечено Dobriy33 как решение

Решение

Видимо даже при нажатии Enter вводится более одного символа в поток, один был прочитан Console.Read(), остальные были в итоге переданы в ReadLine в 180-й строке.
Для паузы лучше ReadLine или даже ReadKey.

Добавлено через 18 минут
Dobriy33,
а в строках 152-169 лучше не привязываться к 999, как к заведомо отсутствующему ID, а воспользоваться IndexOf:
C#
1
2
3
4
5
6
7
8
9
10
Console.WriteLine("Введите Ваше имя пользователя: ");
string name = Console.ReadLine();
int id = Array.IndexOf(Users, name);
while (id<0)
{
    Console.WriteLine("Такого пользователя не существует. Попробуйте снова...");
    Console.WriteLine("Введите Ваше имя пользователя: ");
    name = Console.ReadLine();
    id = Array.IndexOf(Users, name);
}
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 15
17.12.2015, 23:59  [ТС] 9
Даценд, а если я строковый массив с правами заменю на числовой(нужно задать права рандомно всем, кроме админа), подразумевая что на пример Отсутствие прав - 0, Чтение - 1, Запись - 2 и т.д. Выводить придётся с помощью switch в зависимости от числа?
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
18.12.2015, 00:20 10
Цитата Сообщение от Dobriy33 Посмотреть сообщение
Выводить придётся с помощью switch в зависимости от числа?
Нет, по индексу из вот из такого массива:
C#
1
2
3
4
5
6
string[] strRights = { "Полные права", "Чтение", "Запись", "Передача прав" };
int[,] rights = { {0, 1, 2, 3, 1, 2},
                  //... 
                  {1, 3, 2, 3, 1, 0}};
//...
Console.Write(strRights[rights[id, j]]);
1
0 / 0 / 0
Регистрация: 09.04.2012
Сообщений: 15
18.12.2015, 00:26  [ТС] 11
Благодарю.
0
18.12.2015, 00:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2015, 00:26
Помогаю со студенческими работами здесь

Скрытие окна консоли во время выполнения приложения
Консольное приложение на .NET 4.0 Как скрыть окно приложения во время его работы? Т.е. чтобы окошко...

Не могу остановить закрытие программы после выполнения
program massiv; uses crt; var i:integer; a:array of integer; begin for i:=0 to 10 do...

Действие при закрытии консоли во время выполнения скрипта
Доброго времени суток! Возник вопрос: Есть некий бесконечный цикл (содержание роли не играет)....

Закрытие сторонней программы через определенное время
Может кто нибудь скинуть рабочий пример таймера, который закрывает стороннее приложение?


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

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