Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 16:59   #1
MaRKer.nsk
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 53
Вопрос Как избавиться от мерцания в консоле?

Здравствуйте, у меня есть прога - которая генерирует случайный список, без повторяющихся в нём элементов: вот
Код:
	for(int i=0;i<SIZE;i++){
		do
		{
			system("cls");
			wcout<<L"Идет процесс генерации чисел, пока сгенерированно: "<<i;
			randomn=rand()%SIZE+1;
			p=search(ar, SIZE, randomn);
			if (p==-1) 
			{
				ar[i]=randomn;
				Freely=true;
			} else 
			{;
				Freely=false;
			}

		} while (Freely==false);
	}
и вот из за постоянного повторения надпись (wcout<<L"Идет процесс генерации чисел, пока сгенерированно: "<<i сильно мерцает, существует способ убрать это мерцание?
ЗЫ прикрепил полный исходник со всем кодом;
Вложения
Тип файла: rar Prog57.rar (1.8 Кб, 17 просмотров)
MaRKer.nsk вне форума Ответить с цитированием
Старый 11.04.2010, 17:59   #2
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

перевыводи на экран не всю строку, а изменяющуюся часть.

Это делается служебным символом \b (по идее возвращает позицию печати на 1 символ назад)

Правда может не прокатить, ибо это управляющий символ кодировки ASCII, а у вас явно Юникод используется (в юникоде это символ U+0008)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс

Последний раз редактировалось ROD; 11.04.2010 в 18:01.
ROD вне форума Ответить с цитированием
Старый 11.04.2010, 18:21   #3
Matr1x
Студент
Пользователь
 
Аватар для Matr1x
 
Регистрация: 10.11.2009
Сообщений: 49
По умолчанию

Код:
for(int i=0;i<SIZE;i++){
                       do
		{
			system("cls");
			wcout<<L"Идет процесс генерации чисел, пока сгенерированно: "<<i;
                                          Sleep(50); // <-- как я решил это в свое время )
			randomn=rand()%SIZE+1;
			p=search(ar, SIZE, randomn);
			if (p==-1) 
			{
				ar[i]=randomn;
				Freely=true;
			} else 
			{;
				Freely=false;
			}

		} while (Freely==false);
	}
Matr1x вне форума Ответить с цитированием
Старый 11.04.2010, 18:27   #4
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Цитата:
Sleep(50); // <-- как я решил это в свое время )
Тем самым вы останавливаете всю программу (т.е. каждые 50 миллисекунд программа будет стоять и не генерировать числа (вообще ничего не делать), на заре развития ЭВМ вас бы за такое гвоздями к потолку прибили), если на то пошло, то лучше просто пропускать несколько шагов цикла (т.е. печатать не на каждом шагу, а например на каждом десятом шаге цикла)
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 11.04.2010, 19:09   #5
MaRKer.nsk
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 53
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Тем самым вы останавливаете всю программу (т.е. каждые 50 миллисекунд программа будет стоять и не генерировать числа (вообще ничего не делать), на заре развития ЭВМ вас бы за такое гвоздями к потолку прибили), если на то пошло, то лучше просто пропускать несколько шагов цикла (т.е. печатать не на каждом шагу, а например на каждом десятом шаге цикла)
Ну насчет слипа и сам понял, но не воспользовался - из за того что тогда времени уйдет немерено... на генерацию(( а вот насчет пропуска шагов тоже думал... но решил спросит вдруг какая функция есть, или оператор ну, спс тогда за советы.

Цитата:
Сообщение от ROD Посмотреть сообщение
Тем самым вы останавливаете всю программу (т.е. каждые 50 миллисекунд программа будет стоять и не генерировать числа (вообще ничего не делать), на заре развития ЭВМ вас бы за такое гвоздями к потолку прибили), если на то пошло, то лучше просто пропускать несколько шагов цикла (т.е. печатать не на каждом шагу, а например на каждом десятом шаге цикла)
Ну насчет слипа и сам понял, но не воспользовался - из за того что тогда времени уйдет немерено... на генерацию(( а вот насчет пропуска шагов тоже думал... но решил спросит вдруг какая функция есть, или оператор ну, спс тогда за советы.

Последний раз редактировалось Stilet; 13.04.2010 в 13:25.
MaRKer.nsk вне форума Ответить с цитированием
Старый 11.04.2010, 23:16   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

да не так уж там много времени... там числа по формуле считаются
NiCola999 вне форума Ответить с цитированием
Старый 12.04.2010, 11:42   #7
MaRKer.nsk
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 53
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
да не так уж там много времени... там числа по формуле считаются
Ну относительно... у меня на генерацию 1000 чисел уходит примерно 3 минуты
MaRKer.nsk вне форума Ответить с цитированием
Старый 12.04.2010, 11:58   #8
evgn
Разрабатываюсь....
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 68
По умолчанию

Убираем system("cls") и используем функцию позиционирования курсора в консоли
Код:
HANDLE hсon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD coord;
coord.x = 0;
coord.y = 10;
.....
SetConsoleCursorPosition(hcon, coord);
wcout<<L"Идет процесс генерации чисел, пока сгенерированно: "<<i;
Или можно один раз вывести предложение и менять только цифру в конце.
evgn вне форума Ответить с цитированием
Старый 13.04.2010, 12:41   #9
MaRKer.nsk
Пользователь
 
Регистрация: 27.03.2010
Сообщений: 53
По умолчанию

хм... а так наверно получше будет, попробую=) спс за совет.
MaRKer.nsk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избавиться от мерцания при передвижении Timages. jocry Помощь студентам 13 22.07.2012 09:46
как избавиться от мерцания в OpenGL при перспективной проекции (двойная буферизация включена) anyx Свободное общение 0 01.02.2010 10:00
Как избавиться от депрессии... :( ? Alex Cones Свободное общение 79 01.12.2009 14:05
Изменение размера шрифта выводимого текста в консоле, как побороть? Artefact Qt и кроссплатформенное программирование С/С++ 0 26.02.2008 00:28
как избавиться от 2.26188E+19?? banker Microsoft Office Excel 11 12.12.2007 09:35