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

C# для начинающих

Войти
Регистрация
Восстановить пароль
 
 
KIROS
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 33
#1

Как сделать исключение при вводе неправильной команды - C#

18.05.2015, 12:25. Просмотров 626. Ответов 16
Метки нет (Все метки)

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
using System;
using System.IO;
using System.Diagnostics;
using KIROS;
using System.Threading;
 
namespace ZIKIRO
{
    namespace KIROS
    {
        class Program
        {
            static void Main(string[] args)
            {
            
                Console.WriteLine("Загрузка OS KIRO...");
                Thread.Sleep(3000);
                Console.WriteLine("Загрузка OS KIRO...");
                Thread.Sleep(3000);
                Console.WriteLine("Загрузка OS KIRO...");
                Thread.Sleep(1800);//Имитируем загрузку нашей псевдо-OS.
                Console.WriteLine("OS KIRO готова к работе");
                Console.Write("command>> ");
                while (true)
                {
                    var In = Console.ReadLine();
                    if (In == "help")
                    {
                        Console.WriteLine(" help - справка. \n folder - открыть менеджер директорий. \n OFF - выключение PC. \n KDir - открыть проводник основной ОС.");
                        Console.Write("command>> ");
                    }
                    if (In == "OFF")
                    {
                        Console.WriteLine("Выключаю PC...");
                        Console.Write("command>> ");
                        Process.Start("shutdown.exe", "/s /t 0");
                    }
                    {
                        if (In == "folder")
                        {
                            Console.WriteLine("Чтение папок на D:/");
                            DirectoryInfo[] cDirs = new DirectoryInfo(@"E:\").GetDirectories();
                            // Записываем полученный список в файл
                            using (StreamWriter sw = new StreamWriter("DirectoryInfo.txt"))
                            {
                                foreach (DirectoryInfo dir in cDirs)
                                {
                                    sw.WriteLine(dir.Name);
                                }
                            }
                            // Читаем записанные данные
                            string line = "";
                            using (StreamReader sr = new StreamReader("DirectoryInfo.txt"))
                            {
                                while ((line = sr.ReadLine()) != null)
                                {
                                    Console.WriteLine(line);
                                }
                                Console.Write("command>> ");
                            }
                        } if (In == "KDir")
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("explorer", "");
                            Console.Write("command>> ");
                        } if (In == "total")
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("totalcmd.exe", "");
                            Console.Write("command>> ");
                        } 
                         
                    }
                }
            }
        }
    }
}
Пишу консольное приложение по типу DosBox, только с другими функциями. Как сделать исключение при вводе неправильной команды? Вот что должно бы выводить при ошибке:
C#
1
2
Console.WriteLine("Неизвестная команда!");
Console.Write("command>> ");
Какой командой это можно реализовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2015, 12:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать исключение при вводе неправильной команды (C#):

.NET 4.x Исключение при вводе информации из файла - C#
Всем здравствовать! Может кто поможет, я никак не пойму почему вылетает исключение вида System.IndexOutOfRangeException при попытке...

Создать исключение при вводе отрицательных чисел - C#
static void Main(string args) { string q = "q"; SimpleCalculator sc = new...

Какое исключение генерировать при вводе некорректных данных - C#
Какое исключение генерировать при вводе неккорекных данных, например в переменную типа int пытались ввести текст и сообщить что вот...

Как сделать так, чтобы при вводе отрицательного кол-ва человек или =0, в консоли выводилось «Количество челове - C#
Как сделать так, чтобы при вводе отрицательного кол-ва человек или =0, в консоли выводилось «Количество человек должно быть >= 1». Что...

Как сделать простые команды? - C#
Чего не хватает? static void Main(string args) { bool _break = false; while (! _break) ...

Как сделать выполнение команды по нажатии клавиши? - C#
Здравствуйте! Задачка простая: при нажатии, скажем, на кнопку "" должно выскочить MessageBox с каки-то текстом. Как это...

16
Art
153 / 153 / 35
Регистрация: 20.12.2011
Сообщений: 1,502
Завершенные тесты: 2
18.05.2015, 12:31 #2
KIROS, первое, что приходит на ум - создать список допустимых команд и каждый раз после ввода, делать проверку на наличие введенной команды в этом списке.
0
Даценд
Модератор
Эксперт .NET
3520 / 3441 / 1770
Регистрация: 20.04.2015
Сообщений: 6,345
18.05.2015, 12:48 #3
Если не подразумевается исключение типа try...catch, то можно так
C#
1
2
3
4
5
6
7
8
9
10
11
12
string[] commands = { "com1", "com2", "com3" };
while (true)
{
    Console.Write("command>> ");
    var In = Console.ReadLine();
    if (Array.IndexOf(commands, In) < 0)
    {
        Console.WriteLine("Неизвестная команда!");
        continue;
    }
    //if (In == "help") и т.д.
}
1
sldp
271 / 271 / 74
Регистрация: 29.10.2011
Сообщений: 900
Завершенные тесты: 2
18.05.2015, 13:27 #4
C#
1
2
3
4
string[] comm_arr = { "command1", "command2", "command3" };
Console.Write("command>> ");
var In = Console.ReadLine();
if (!comm_arr.Contains(In)) Console.WriteLine("Неизвестная команда!");
1
KIROS
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 33
18.05.2015, 19:10  [ТС] #5
Цитата Сообщение от Даценд Посмотреть сообщение
Если не подразумевается исключение типа try...catch, то можно так
C#
1
2
3
4
5
6
7
8
9
10
11
12
string[] commands = { "com1", "com2", "com3" };
while (true)
{
    Console.Write("command>> ");
    var In = Console.ReadLine();
    if (Array.IndexOf(commands, In) < 0)
    {
        Console.WriteLine("Неизвестная команда!");
        continue;
    }
    //if (In == "help") и т.д.
}
Теперь при любой имеющейся команде, после ее выполнения, выдает "Неизвестная команда!".

Добавлено через 35 секунд
Цитата Сообщение от sldp Посмотреть сообщение
if (!comm_arr.Contains(In)) Console.WriteLine("Неизвестная команда!");
не выходит: компилятор ругается на эту часть кода..
0
sldp
271 / 271 / 74
Регистрация: 29.10.2011
Сообщений: 900
Завершенные тесты: 2
18.05.2015, 19:15 #6
Цитата Сообщение от KIROS Посмотреть сообщение
не выходит: компилятор ругается на эту часть кода..
фреймворк 4й нужен.
и подключите :
C#
1
using System.Linq;
0
Даценд
Модератор
Эксперт .NET
3520 / 3441 / 1770
Регистрация: 20.04.2015
Сообщений: 6,345
18.05.2015, 19:20 #7
KIROS,
не верю, покажите код (только цикл while)

Добавлено через 54 секунды
это я о
Цитата Сообщение от KIROS Посмотреть сообщение
Теперь при любой имеющейся команде, после ее выполнения, выдает "Неизвестная команда!".
0
KIROS
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 33
19.05.2015, 12:01  [ТС] #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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using System;
using System.IO;
using System.Diagnostics;
using System.Threading;
 
namespace ZIKIRO
{
    namespace KIROS
    {
        class Program
        {
            static void Main(string[] args)
            {
 
                Console.WriteLine("Загрузка OS KIRO...");
                Thread.Sleep(3000);
                Console.WriteLine("Загрузка OS KIRO...");
                Thread.Sleep(3000);
                Console.WriteLine("Загрузка OS KIRO...");
                Thread.Sleep(1800);//Имитируем загрузку нашей псевдо-OS.
                Console.WriteLine("OS KIRO готова к работе");
                Console.Write("command>> ");
                while (true)
                {
                    var In = Console.ReadLine();
                    if (In == "help")
                    {
                        Console.WriteLine(" help - справка. \n folder с/d/e- открыть менеджер директорий диска C, D или E. \n OFF - выключение PC. \n KDir - открыть проводник основной ОС.");
                        Console.Write("command>> ");
                        
                    }
                    if (In == "OFF")
                    {
                        Console.WriteLine("Выключаю PC...");
                        Console.Write("command>> ");
                        Process.Start("shutdown.exe", "/s /t 0");
                    }
                    {
                        if (In == "folder c")
                        {
                            Console.WriteLine("Чтение папок на C:/");
                            DirectoryInfo[] cDirs = new DirectoryInfo(@"C:\").GetDirectories();
                            // Записываем полученный список в файл
                            using (StreamWriter sw = new StreamWriter("DirectoryInfoC.txt"))
                            {
                                foreach (DirectoryInfo dir in cDirs)
                                {
                                    sw.WriteLine(dir.Name);
                                }
                            }
                            // Читаем записанные данные
                            string line = "";
                            using (StreamReader sr = new StreamReader("DirectoryInfoC.txt"))
                            {
                                while ((line = sr.ReadLine()) != null)
                                {
                                    Console.WriteLine(line);
                                }
                                Console.Write("command>> ");
                            }
                        }
                        if (In == "folder d")
                        {
                            Console.WriteLine("Чтение папок на d:/");
                            DirectoryInfo[] cDirs = new DirectoryInfo(@"d:\").GetDirectories();
                            // Записываем полученный список в файл
                            using (StreamWriter sw = new StreamWriter("DirectoryInfoD.txt"))
                            {
                                foreach (DirectoryInfo dir in cDirs)
                                {
                                    sw.WriteLine(dir.Name);
                                }
                            }
                            // Читаем записанные данные
                            string line = "";
                            using (StreamReader sr = new StreamReader("DirectoryInfoD.txt"))
                            {
                                while ((line = sr.ReadLine()) != null)
                                {
                                    Console.WriteLine(line);
                                }
                                Console.Write("command>> ");
                            }
                        } 
                        if (In == "folder e")
                        {
                            Console.WriteLine("Чтение папок на E:/");
                            DirectoryInfo[] cDirs = new DirectoryInfo(@"E:\").GetDirectories();
                            // Записываем полученный список в файл
                            using (StreamWriter sw = new StreamWriter("DirectoryInfoE.txt"))
                            {
                                foreach (DirectoryInfo dir in cDirs)
                                {
                                    sw.WriteLine(dir.Name);
                                }
                            }
                            // Читаем записанные данные
                            string line = "";
                            using (StreamReader sr = new StreamReader("DirectoryInfoE.txt"))
                            {
                                while ((line = sr.ReadLine()) != null)
                                {
                                    Console.WriteLine(line);
                                }
                                Console.Write("command>> ");
                            }
                        }if (In == "KDir")
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("explorer", "");
                            Console.Write("command>> ");
                        } if (In == "total")
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("totalcmd.exe", "");
                            Console.Write("command>> ");
                        } string[] comm_arr = { "command1", "command2", "command3" };
 
                
                        if (!comm_arr.Equals(In)) Console.WriteLine("ERROR!!!");
                        Console.Write("command>> ");
                            //if (In == "help") и т.д.
                        }
 
                    }
                }
            }
        }
    }
Не совсем понял (я самоучка). вот код.
0
Даценд
Модератор
Эксперт .NET
3520 / 3441 / 1770
Регистрация: 20.04.2015
Сообщений: 6,345
19.05.2015, 12:57 #9
Сравните с тем, что я предложил
C#
1
if (Array.IndexOf(commands, In) < 0)
с тем что sldp предложил
C#
1
if (!comm_arr.Contains(In))
строку
Цитата Сообщение от KIROS Посмотреть сообщение
C#
1
if (!comm_arr.Equals(In))
0
sldp
271 / 271 / 74
Регистрация: 29.10.2011
Сообщений: 900
Завершенные тесты: 2
19.05.2015, 13:00 #10
немножко упростил ваш код

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
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using System.Threading;
using System.Diagnostics;
 
namespace ZIKIRO
{  
    class OSKIRO
    {
        public OSKIRO()
        {
            Start();
        }
 
        void Start()
        {
            Console.Write("Загрузка OS KIRO 10%"); 
            for (int i = 1; i <= 10; i++)
            {
                Console.Write("\b\b\b");
                Thread.Sleep(200);
                Console.Write(i+"0%");
            }
            Console.WriteLine("\nOS KIRO готова к работе");
        }
 
        public void Work()
        {
            bool work = true;
            while (work)
            {
                Console.Write("\ncommand>> ");
                string comm = Console.ReadLine();
                switch (comm)
                {
                    case "help": Console.WriteLine(" help - справка. \n folder с/d/e- открыть менеджер директорий диска C, D или E. \n OFF - выключение PC. \n KDir - открыть проводник основной ОС."); ;
                        break;
                    case "OFF": Process.Start("shutdown.exe", "/s /t 0");
                        break;
                    case "folder c":
                    case "folder d":
                    case "folder e":
                        {
                            string dir = @"C:\";
                            if (comm == "folder d") dir = @"D:\";
                            else if (comm == "folder e") dir = @"E:\";
 
                            Console.WriteLine("Спосок папок на " + dir);
                            foreach (DirectoryInfo item in new DirectoryInfo(dir).GetDirectories())
                            {
                                Console.WriteLine(item.Name);
                            }
                        }
                        break;
                    case "KDir":
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("explorer");
                        }
                        break;
                    case "total":
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("totalcmd.exe");
                        }
                        break;
                    case "exit": work = false;
                        break;
                    default: Console.WriteLine("Команда не найдена!");
                        break;
                }              
            }
            Console.WriteLine("OS KIRO завершает свою работу");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            OSKIRO myOS = new OSKIRO();
            myOS.Work();
            
            Console.ReadKey();
        }
    }
}
пс можно создать отдельный класс команды, в котором будет 3 поля (1 - название команды. 2- описание. 3 - делигат в котором будет реализация функционала команды, если уже дошли до этого).
1
kolorotur
Эксперт .NET
9110 / 7616 / 1211
Регистрация: 17.09.2011
Сообщений: 13,151
19.05.2015, 13:05 #11
Цитата Сообщение от sldp Посмотреть сообщение
C#
1
2
3
case "folder c":
case "folder d":
case "folder e":
C#
1
2
3
4
5
case "folder a"
case "folder b"
... 22 строки спустя
case "folder y"
case "folder z"
0
KIROS
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 33
19.05.2015, 13:08  [ТС] #12
Цитата Сообщение от Даценд Посмотреть сообщение
Сравните с тем, что я предложил
C#
1
if (Array.IndexOf(commands, In) < 0)
с тем что sldp предложил
C#
1
if (!comm_arr.Contains(In))
строку
По другому не работало. У вас Visual Studio 2010 или?

Добавлено через 1 минуту
Цитата Сообщение от sldp Посмотреть сообщение
немножко упростил ваш код

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
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using System.Threading;
using System.Diagnostics;
 
namespace ZIKIRO
{  
    class OSKIRO
    {
        public OSKIRO()
        {
            Start();
        }
 
        void Start()
        {
            Console.Write("Загрузка OS KIRO 10%"); 
            for (int i = 1; i <= 10; i++)
            {
                Console.Write("\b\b\b");
                Thread.Sleep(200);
                Console.Write(i+"0%");
            }
            Console.WriteLine("\nOS KIRO готова к работе");
        }
 
        public void Work()
        {
            bool work = true;
            while (work)
            {
                Console.Write("\ncommand>> ");
                string comm = Console.ReadLine();
                switch (comm)
                {
                    case "help": Console.WriteLine(" help - справка. \n folder с/d/e- открыть менеджер директорий диска C, D или E. \n OFF - выключение PC. \n KDir - открыть проводник основной ОС."); ;
                        break;
                    case "OFF": Process.Start("shutdown.exe", "/s /t 0");
                        break;
                    case "folder c":
                    case "folder d":
                    case "folder e":
                        {
                            string dir = @"C:\";
                            if (comm == "folder d") dir = @"D:\";
                            else if (comm == "folder e") dir = @"E:\";
 
                            Console.WriteLine("Спосок папок на " + dir);
                            foreach (DirectoryInfo item in new DirectoryInfo(dir).GetDirectories())
                            {
                                Console.WriteLine(item.Name);
                            }
                        }
                        break;
                    case "KDir":
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("explorer");
                        }
                        break;
                    case "total":
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("totalcmd.exe");
                        }
                        break;
                    case "exit": work = false;
                        break;
                    default: Console.WriteLine("Команда не найдена!");
                        break;
                }              
            }
            Console.WriteLine("OS KIRO завершает свою работу");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            OSKIRO myOS = new OSKIRO();
            myOS.Work();
            
            Console.ReadKey();
        }
    }
}
пс можно создать отдельный класс команды, в котором будет 3 поля (1 - название команды. 2- описание. 3 - делигат в котором будет реализация функционала команды, если уже дошли до этого).
спасибо. сейчас опробую и отпишусь о результатах.
0
sldp
271 / 271 / 74
Регистрация: 29.10.2011
Сообщений: 900
Завершенные тесты: 2
19.05.2015, 13:11 #13
kolorotur, Это к создателю ОС там лишь такие 3 команды
0
KIROS
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 33
19.05.2015, 13:14  [ТС] #14
Цитата Сообщение от sldp Посмотреть сообщение
немножко упростил ваш код

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
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using System.Threading;
using System.Diagnostics;
 
namespace ZIKIRO
{  
    class OSKIRO
    {
        public OSKIRO()
        {
            Start();
        }
 
        void Start()
        {
            Console.Write("Загрузка OS KIRO 10%"); 
            for (int i = 1; i <= 10; i++)
            {
                Console.Write("\b\b\b");
                Thread.Sleep(200);
                Console.Write(i+"0%");
            }
            Console.WriteLine("\nOS KIRO готова к работе");
        }
 
        public void Work()
        {
            bool work = true;
            while (work)
            {
                Console.Write("\ncommand>> ");
                string comm = Console.ReadLine();
                switch (comm)
                {
                    case "help": Console.WriteLine(" help - справка. \n folder с/d/e- открыть менеджер директорий диска C, D или E. \n OFF - выключение PC. \n KDir - открыть проводник основной ОС."); ;
                        break;
                    case "OFF": Process.Start("shutdown.exe", "/s /t 0");
                        break;
                    case "folder c":
                    case "folder d":
                    case "folder e":
                        {
                            string dir = @"C:\";
                            if (comm == "folder d") dir = @"D:\";
                            else if (comm == "folder e") dir = @"E:\";
 
                            Console.WriteLine("Спосок папок на " + dir);
                            foreach (DirectoryInfo item in new DirectoryInfo(dir).GetDirectories())
                            {
                                Console.WriteLine(item.Name);
                            }
                        }
                        break;
                    case "KDir":
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("explorer");
                        }
                        break;
                    case "total":
                        {
                            Console.WriteLine("Открываю проводник");
                            Process.Start("totalcmd.exe");
                        }
                        break;
                    case "exit": work = false;
                        break;
                    default: Console.WriteLine("Команда не найдена!");
                        break;
                }              
            }
            Console.WriteLine("OS KIRO завершает свою работу");
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            OSKIRO myOS = new OSKIRO();
            myOS.Work();
            
            Console.ReadKey();
        }
    }
}
пс можно создать отдельный класс команды, в котором будет 3 поля (1 - название команды. 2- описание. 3 - делигат в котором будет реализация функционала команды, если уже дошли до этого).
Огромное спасибо! Прекрасно работает!
0
kolorotur
19.05.2015, 13:24     Как сделать исключение при вводе неправильной команды
  #15

Не по теме:

sldp, ой, простите — это я вас по ошибке процитировал

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2015, 13:24
Привет! Вот еще темы с ответами:

Как вывести exception при вводе пробела - C#
Добрый день, Есть код программы в который нужно добавить exception, который появляется при вводе пробела. Как это сделать? namespace...

Как экранировать кавычки при вводе текста? - C#
Ребята! хелп, в ощм благодарю вас за ващи советы, в первом вопросе, но тут возникла одна проблема. Моя простая программа содержит лекции по...

Как правильно прописать условие при вводе с клавиатуры? - C#
Console.WriteLine(&quot;Вы хотите добавить свою книгу?&quot;, a); if (a=='Да') { ...

Как вывести одну запись при вводе с клавиатуры в перечислении? - C#
Вопрос в заголовке. Нужно вывести запись через for в перечислении. Например, вводишь &quot;понедельник&quot; и пишет &quot;завтра вторник&quot;. Спасибо за...


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

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

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