Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
2 / 2 / 2
Регистрация: 01.07.2013
Сообщений: 33
1

25 строка, 80 символ в консоли

02.11.2013, 02:24. Просмотров 1189. Ответов 6
Метки нет (Все метки)


Существует консольное окно фиксированных размеров (80*25).
Необходимо создать рамку, вдоль границы окна.
Реализация:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static void DrawBorder()
        {
            Console.SetCursorPosition(0, 0);
            Console.BackgroundColor = ConsoleColor.Gray;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.Write("                                  Rogue World!                                  ");
            for (int i = 0; i < 23; i++)
            {
                Console.SetCursorPosition(0, 1 + i);
                Console.Write(" ");
                Console.SetCursorPosition(79, 1 + i);
                Console.Write(" ");
            }
            Console.Write("                                                                               ");
            Console.SetCursorPosition(0, 0);
            Console.ResetColor();
        }
В этом коде в последней строчке (14) вырисовывается 79 символов, а не 80. результат мы видим ниже:
25 строка, 80 символ в консоли

Однако, если в последнюю строчку (14) мы впишем 80 символ (после которого курсор по сути переходит на несуществующую 26 строку), то произойдет следующее:
25 строка, 80 символ в консоли

Вопрос: как создать полную (с 80 символом) рамку, чтобы не было таких проблем? (как на скриншоте ниже (магия фотошопа))
25 строка, 80 символ в консоли

P.S.: Создание 26 строки - не вариант.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.11.2013, 02:24
Ответы с готовыми решениями:

Функция принимает блоки данных (символ1, символ 2, строка), в каждой строке заменять символ 1 на символ 2
функция принимает блоки данный(символ1, символ 2 , строка), в каждом строке заменять символ 1 на...

Текущий символ в консоли (символ над кареткой)
Допустим программа вывод некий текст на экран. Затем курсор (каретку) перемещаем в заданное...

Дана строка символов, посчитать сколько раз встречается символ + и символ *
Дана строка символов, посчитать сколько раз встречается символ &quot;+&quot; и символ &quot;*&quot;. ...

Строка: каждый символ строки S заменяются на следующий за ним символ в строке S...
Дано: в текстовом файле fin.txt находится текст на русском языке. С клавиатуры вводится число К....

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы С#-разработчиков‌
6
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.11.2013, 03:03 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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
 
namespace ConsoleApplication32
{
    internal class Program
    {
        private static void Main()
        {
            // PrintBorder(ConsoleColor.Gray);
            PrintBorderWithText(ConsoleColor.Gray, ConsoleColor.DarkGreen, "Hello world!");
            Console.ReadKey();
        }
 
        private static void PrintBorder(ConsoleColor color)
        {
            int width = Console.WindowWidth;
            int height = Console.WindowHeight;
            string line = new string(' ', width);
            Console.BackgroundColor = color;
            Console.SetCursorPosition(0, 0);
            Console.Write(line);
            for (int i = 1; i < height - 1; i++)
            {
                Console.Write(" ");
                Console.SetCursorPosition(width - 1, i);
                Console.Write(" ");
            }
            Console.WriteLine(line);
            Console.ResetColor();
        }
 
        private static void PrintBorderWithText(ConsoleColor color, ConsoleColor foreColor, string text)
        {
            int width = Console.WindowWidth;
            if (text.Length > width)
                throw new ArgumentException("too long text", "text");
            PrintBorder(color);
            Console.BackgroundColor = color;
            Console.ForegroundColor = foreColor;
            string line = text.PadLeft((width + text.Length) >> 1).PadRight(width);
            Console.SetCursorPosition(0, 0);
            Console.Write(line);
            Console.ResetColor();
        }
    }
}
0
2 / 2 / 2
Регистрация: 01.07.2013
Сообщений: 33
02.11.2013, 10:28  [ТС] 3
Цитата Сообщение от Psilon Посмотреть сообщение
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
using System;
 
namespace ConsoleApplication32
{
    internal class Program
    {
        private static void Main()
        {
            // PrintBorder(ConsoleColor.Gray);
            PrintBorderWithText(ConsoleColor.Gray, ConsoleColor.DarkGreen, "Hello world!");
            Console.ReadKey();
        }
 
        private static void PrintBorder(ConsoleColor color)
        {
            int width = Console.WindowWidth;
            int height = Console.WindowHeight;
            string line = new string(' ', width);
            Console.BackgroundColor = color;
            Console.SetCursorPosition(0, 0);
            Console.Write(line);
            for (int i = 1; i < height - 1; i++)
            {
                Console.Write(" ");
                Console.SetCursorPosition(width - 1, i);
                Console.Write(" ");
            }
            Console.WriteLine(line);
            Console.ResetColor();
        }
 
        private static void PrintBorderWithText(ConsoleColor color, ConsoleColor foreColor, string text)
        {
            int width = Console.WindowWidth;
            if (text.Length > width)
                throw new ArgumentException("too long text", "text");
            PrintBorder(color);
            Console.BackgroundColor = color;
            Console.ForegroundColor = foreColor;
            string line = text.PadLeft((width + text.Length) >> 1).PadRight(width);
            Console.SetCursorPosition(0, 0);
            Console.Write(line);
            Console.ResetColor();
        }
    }
}
Все бы ничего, да только граница снизу теперь сильно жирная
25 строка, 80 символ в консоли
0
74 / 74 / 30
Регистрация: 22.03.2013
Сообщений: 224
02.11.2013, 12:47 4
mycatlikesmilk, У меня все правильно выводит . И зачем в цикле прибавлять к одному i? Не легче начать цикл с одного?
0
Master of Orion
Эксперт .NET
6079 / 4935 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
02.11.2013, 12:50 5
mycatlikesmilk, эт у вас что-то
0
Миниатюры
25 строка, 80 символ в консоли  
Вложения
Тип файла: rar ConsoleApplication32.rar (24.5 Кб, 7 просмотров)
2 / 2 / 2
Регистрация: 01.07.2013
Сообщений: 33
02.11.2013, 17:30  [ТС] 6
Цитата Сообщение от Nevermore_ Посмотреть сообщение
mycatlikesmilk, У меня все правильно выводит . И зачем в цикле прибавлять к одному i? Не легче начать цикл с одного?
Спасибо) Не заметил, когда писал)
Цитата Сообщение от Psilon Посмотреть сообщение
mycatlikesmilk, эт у вас что-то
У вас ширина не фиксирована: слева виднеется скролбар.
У меня же конкретно:
C#
1
2
Console.SetWindowSize(80, 25);
Console.SetBufferSize(80, 25);
0
Эксперт .NET
14847 / 11234 / 2948
Регистрация: 17.09.2011
Сообщений: 18,817
03.11.2013, 00:59 7
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
static void Main(string[] args)
{
    Console.SetBufferSize(80, 25);
    DrawBorder(ConsoleColor.Gray);
    DrawTitle("Rogue World!", ConsoleColor.Gray, ConsoleColor.Black);
    Console.Read();
}
 
static void DrawTitle(string title, ConsoleColor backColor, ConsoleColor foreColor)
{
    var state = SaveState();
 
    Console.SetCursorPosition((Console.BufferWidth - title.Length) / 2 , 0);
    Console.ForegroundColor = foreColor;
    Console.BackgroundColor = backColor;
 
    Console.Write(title);
    LoadState(state);
}
 
static void DrawBorder(ConsoleColor color)
{
    var state = SaveState();
 
    Console.BackgroundColor = color;
    Console.SetCursorPosition(0, 0);
    Console.Write(new string(' ', Console.BufferWidth));
    Console.MoveBufferArea(0, 0, Console.BufferWidth, 1, 0, Console.BufferHeight - 1);
 
    for (int i = 1; i < Console.BufferHeight - 1; i++) {
        Console.SetCursorPosition(0, i);
        Console.Write(' ');
        Console.SetCursorPosition(Console.BufferWidth - 1, i);
        Console.Write(' ');
    }
 
    LoadState(state);
}
 
static ConsoleState SaveState()
{
    return new ConsoleState {
        CursorLeft = Console.CursorLeft,
        CursorTop = Console.CursorTop,
        BackColor = Console.BackgroundColor,
        ForeColor = Console.ForegroundColor
    };
}
 
static void LoadState(ConsoleState state)
{
    Console.CursorLeft = state.CursorLeft;
    Console.CursorTop = state.CursorTop;
    Console.BackgroundColor = state.BackColor;
    Console.ForegroundColor = state.ForeColor;
}
 
struct ConsoleState
{
    public int CursorLeft;
    public int CursorTop;
    public ConsoleColor BackColor;
    public ConsoleColor ForeColor;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.11.2013, 00:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Есть строка (S), как в ней заменить символ (a) на символ (b)
Есть строка (S), как в ней заменить символ (a) на символ (b)?

Строка: Как удалить начальный символ в строке и добавить тот же символ (который удалили) в конец строки?
Как удалить начальный символ в строке и добавить тот же символ (который удалили) в конец строки? ...

Задана строка текста длиной не менее двадцати символов и задан один отдельный символ. Вычислить, какое количество раз этот символ встречается в строке
1. Ввести множество, запись или строку с помощью клавиатуры. 2. Вывести на экран монитора исходную...

Дана строка. Создайте приложение, преобразующее строку, удалив каждый символ «*» и повторив каждый символ, отличный от «*»
Дана строка. Создайте приложение, преобразующее строку, удалив каждый символ «*» и повторив каждый...


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

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

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