С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Владимир М
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 32
1

Заполнить всю консоль одним символом

05.07.2016, 20:10. Просмотров 952. Ответов 13
Метки нет (Все метки)

Создаю двухмерный массив - буфер консоли(или называйте его как хотите) 25x80. Затем вывожу весь массив в консоль - ОЖИДАНИЕ: вся область консоли должна заполниться конкретным символом. РЕАЛЬНОСТЬ: во вложении
код:
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
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<windows.h>
 
int main(int a, char* b[])
{
    int y = 25, x = 80;//высота и ширина консоли
    char** telo;//указатель на двухмерный массив
    telo = new char*[y];//выделяем память под массив
    for(int i = 0; i < y; i++){
        telo[i] = new char[x];      
    }
    
    for(int i = 0; i < y; i++){//заполняем массив 
        for(int j = 0; j < x; j++){
            telo[i][j] = 'a';
        }
    }
    
    printf("\e[1;1H\e[2J");//чистим консоль(только я сомневаюсь в этой строчке)
    HANDLE hOutput;
    hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD Coord;
    for(int i = 0; i < y; i++){//отображаем массив в консоли
        for(int j = 0; j < x; j++){
            Coord.X = j;
            Coord.Y = i;
            SetConsoleCursorPosition(hOutput, Coord);
            cout << telo[i][j];         
        }
    }
    getchar();
}
В чём беда?

Принимаю любую критику, но и проблемку желательно решить.

delete забыл прописать, но это не смертельно
0
Миниатюры
Заполнить всю консоль одним символом  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2016, 20:10
Ответы с готовыми решениями:

Заменить последовательность цифр одним символом #
Здравствуйте, собственно сама задача: Дан текст(2-3 строки) в файле F1....

Заполнение двумерного массива char-ов одним символом
Нужно чтобы весь массив был забит одним символом (например Н) Код: #include...

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

Вывести строку, содержащую слова, разделенные одним символом «.»
Дана строка, состоящая из русских слов, разделенных пробелами (одним или...

Как ограничить поле ввода только одним символом? А двумя?
Как ограничить поле ввода только одним символом? А двумя? Например чтобы сразу...

13
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
05.07.2016, 20:26 2
printf("\e[1;1H\e[2J");//чистим консоль(только я сомневаюсь в этой строчке) - для ОС Windows лучше применить system( "cls" );

А у вас размер консоли точно 80 на 25?
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
05.07.2016, 20:33 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
#include<iostream>
 
 
int main(int a, char* b[])
{
    int y = 25, x = 80;//высота и ширина консоли
    char** telo;//указатель на двухмерный массив
    telo = new char*[y];//выделяем память под массив
    for(int i = 0; i < y; i++){
        telo[i] = new char[x];      
    }
    
    for(int i = 0; i < y; i++){//заполняем массив 
        for(int j = 0; j < x; j++){
            telo[i][j] = 'a';
        }
    }
    std::cout << std::endl;
 
    for(int i = 0; i < y; i++){//отображаем массив в консоли
        for(int j = 0; j < x; j++){
            std::cout << telo[i][j];         
        }
        std::cout << std::endl;
    }
    std::cin >> a;
}
Раз уж вы хотите критики:
- Первое и самое главное, определитесь на каком языке вы пишите С или С++
- Используйте кроссплатформенные решения, windows.h в вашей программе нужен как корове пятая нога.
1
Владимир М
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 32
05.07.2016, 20:35  [ТС] 4
изначально - точно. я растянул её чтобы весь вывод показать

Добавлено через 1 минуту
C++
1
system( "cls" );
не работает почему то
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
05.07.2016, 20:36 5
Владимир М, проблема в чём?

Добавлено через 50 секунд
Цитата Сообщение от Владимир М Посмотреть сообщение
не работает почему то
У меня такая же беда с мотоциклом. Не знаете в чём может быть дело?
1
Владимир М
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 32
05.07.2016, 20:42  [ТС] 6
а почему с
C++
1
SetConsoleCursorPosition(hOutput, Coord);
не получается? Она мне нужна
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
05.07.2016, 20:43 7
Владимир М, понятия не имею. Но если вы хотите с помощью этой штуки писать в произвольные места консоли, лучше редактируйте буфер и выводите его снова.
0
Владимир М
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 32
05.07.2016, 20:53  [ТС] 8
system("cls") работает(slc написал)

Добавлено через 2 минуты
DarkVortex, точно. Благодарю. Сам не додумался.

Добавлено через 4 минуты
Цитата Сообщение от DarkVortex Посмотреть сообщение
- Первое и самое главное, определитесь на каком языке вы пишите С или С++
- Используйте кроссплатформенные решения, windows.h в вашей программе нужен как корове пятая нога.
Благодарю за критику.
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
05.07.2016, 23:18 9
Лучший ответ Сообщение было отмечено Владимир М как решение

Решение

Цитата Сообщение от Владимир М Посмотреть сообщение
область консоли должна заполниться конкретным символом
_hConsoleOut - хэндл консоли (private member)

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
void Console::Bar
(
   WORD        wTop,
   WORD        wBottom,
   WORD        wLeft,
   WORD        wRight,
   WORD        wColor,
   BYTE        byFiller
)
{
   ASSERT(wBottom >= wTop);
   ASSERT(wRight  >= wLeft);
 
   CHAR_INFO      pBuf[MAX_HORIZ_LINE_LENGTH * MAX_VERT_LINE_LENGTH];
   COORD          BufSize;
   COORD          TopLeft;
   SMALL_RECT     Region;
 
   WORD  wVSize = (WORD)min((wBottom - wTop  + 1),MAX_VERT_LINE_LENGTH);
   WORD  wHSize = (WORD)min((wRight  - wLeft + 1),MAX_HORIZ_LINE_LENGTH);
 
   int   iSize = wHSize * wVSize;
 
   // Prepare
   for (int iIdx = 0; iIdx < iSize; ++iIdx)
   {
      pBuf[iIdx].Attributes     = wColor;
      pBuf[iIdx].Char.AsciiChar = byFiller;
   }
 
   // Input Buffer Dimensions
   BufSize.X = wHSize;
   BufSize.Y = wVSize;
 
   // Input Buffer Window
   TopLeft.Y = 0;
   TopLeft.X = 0;
 
   // Output Buffer Locations
   Region.Top    = wTop;
   Region.Bottom = wBottom;
   Region.Left   = wLeft;
   Region.Right  = wRight;
 
   if (!WriteConsoleOutput
      (
         _hConsoleOut,  // Handle to a Console Screen Buffer
         pBuf,          // Ptr to Buffer with Data to Write
         BufSize,       // Column-Row Size of Source Buffer
         TopLeft,       // Upper-Left Cell to Write from
         &Region        // Pointer to Rectangle to Write to
      ))
   {
      // Error !
//      Error();
   }
}
1
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 10
Завершенные тесты: 1
06.07.2016, 00:01 10
Цитата Сообщение от DarkVortex Посмотреть сообщение
- Первое и самое главное, определитесь на каком языке вы пишите С или С++
Как это относится к данной теме и решению проблемы?

Добавлено через 4 минуты
Цитата Сообщение от DarkVortex Посмотреть сообщение
- Используйте кроссплатформенные решения, windows.h в вашей программе нужен как корове пятая нога.
Если рассуждать адекватно, то именно ваши советы - это и есть пятая нога коровы...
1
Владимир М
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 32
06.07.2016, 05:16  [ТС] 11
А
Код
system("cls")
всё таки не работает. Новую тему для этого создал Не работают команды system()
0
gazlan
3143 / 1920 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
06.07.2016, 05:53 12
Лучший ответ Сообщение было отмечено Владимир М как решение

Решение

Цитата Сообщение от Владимир М Посмотреть сообщение
system("cls") всё-таки не работает
Она и не нужна. bar() перекрывает все ваши потребности (и отработает на порядок быстрее) - просто залейте окно консоли символом пробела с цветом фона.
1
Владимир М
0 / 0 / 0
Регистрация: 08.10.2015
Сообщений: 32
06.07.2016, 21:28  [ТС] 13
о, еще нашёлWriteConsoleOutput()
0
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
06.07.2016, 21:37 14
Владимир М, Может вам попробовать pdcurses? Она удобнее для работы с консолью.
К тому же почти кроссплатформенная. Ну код можно и в windows и в *nix системах компилировать один и тот же.
1
06.07.2016, 21:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2016, 21:37

Как заменить буквы одним символом, а знаки препинания - другим?
Здравствуйте! Дайте, пожалуйста, идею, как можно оставить в тексте только...

Описать функцию для подсчета числа строк, начинающихся и заканчива- ющихся одним и тем же символом
Описать функцию для подсчета числа строк, начинающихся и заканчива- ющихся...

Заполнить матрицу символом * согласно условию
Задание 2. Сформировать двумерный массив A , содержащий символ &quot;*&quot; в...


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

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

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