2013-06-27 3 views
5

C++ Я хотел бы, чтобы очистить экран CMD Я видел несколько вариантов первого являетсяClear Screen с помощью

system('clr'); 

но не хочу использовать систему причину, то это делает его зависимым от окна, то же самое с версией Unix

если я попробовать

cout << string(22, '\n'); 

тогда моя следующая строка текста находится в нижней части экрана, и я хочу его на самом верху. Как я могу очистить экран и вернуть текст в верхнюю часть экрана?

Так сказать, у меня есть это.

cout<<string(22, '\n'); 
cout<<"************Question 1 *******"<<endl; 
cout<<"WHO WAS THE FIRST BLACK PRESEDENT?"<<endl; 
cout<<"(1) Obama"<<endl; 
cout<<"(2) Bush"<<endl; 
cout<<"(3) Jordan" <<endl; 
cin>>answer>>endl; 

это очистит экран затем положить MyMenu в нижней части экрана ... Как я могу сделать это четкий экран и поставить вопрос/ответ обратно в верхней части экрана.

+0

Вы изучили какое-то решение, такое как ncurses/PDCurses? Это не совсем кросс-платформенный, но он будет делать то, что вы хотите. – CmdrMoozy

+2

как насчет 'clrscr()' –

+0

Я думал, что clrscr() была функцией только для компилятора ... как в просто борланд? –

ответ

11

Попробуйте это: он работает как на Linux, так и на Windows.

cout << "\033[2J\033[1;1H"; 

Это строка специальных символов, которые переводят, чтобы очистить команду экрана.

Вы можете заключить это в функцию, например. clrscr() в зависимости от вашей реализации.

+0

Нет, это не так! ncourses работает только в * x, а не в Windows – boctulus

+0

@Boctulus, я думаю, вы ошибаетесь. У меня есть окна и linux env, и я использую это для очистки экрана. Я предлагаю вам попробовать себя в своей среде Windows. – catzilla

+0

Я сделал (Windows 8.1) – boctulus

0

В UNIX попробовать

system("clear") 

clrscr() не может работать в UNIX, потому что некоторые компиляторы не поддерживают conio.h

+0

спасибо, но я не хочу, чтобы зависящая от ОС функция, либо стандартная функция C++, либо другой способ, не зависящий от ОС. –

+0

Это сложная задача здесь, поскольку conio поддерживается главным образом в окнах и является не поддерживается другими операционными системами, как правило, –

8

Если вы хотите, решение, которое будет работать на Windows, Mac & Linux/UNIX, вы будете нужно придумать собственную реализацию. Я не считаю, что есть один способ сделать это, который работает на всех платформах.

Для Mac/Linux/UNIX/BSD/etc., Ncurses предоставляет простой способ сделать это (http://www.gnu.org/software/ncurses/).

Для Windows вы, вероятно, захотите изучить conio.h (http://en.wikipedia.org/wiki/Conio.h) или PDCurses (http://pdcurses.sourceforge.net/) или что-то подобное. В качестве альтернативы, похоже, вы можете сделать это без каких-либо сторонних библиотек в соответствии с этой статьей Microsoft KB: http://support.microsoft.com/kb/99261.

К сожалению, для этого нет стандартной функции C/C++. Вы должны иметь возможность написать небольшую функцию, которая будет строить работу & на любой платформе, используя различные методы, упомянутые мной и некоторые директивы препроцессора.

Если у вас нет удобного способа определить платформу, я бы, вероятно, рекомендовал cmake.

+0

Так что нет стандартной функции, поэтому я должен определить платформу, а затем использовать один из этих двух вариантов на основе того, что я обнаружил? –

+2

Насколько я знаю, да. Я ожидаю, что результатом будет всего лишь сто строк кода или что-то в этом роде, и вы должны использовать систему сборки, которая в любом случае может обнаружить платформу, поэтому это, вероятно, не так «уродливое», как вы думаете. – CmdrMoozy

+0

собирается дать вам ответ, прежде чем некоторые глупые люди, которые думают, что c и C++ - это точно такая же программа, и просто заставляют одно не делать что-то, а другое не должно. –

1

Другим способом было бы использовать OpenGL, Qt или SDL, которые являются кросс-платформенными и пишут графическую консоль. Это можно увидеть во многих играх с roguelike, например Dwarf Fortress.

+0

Это будет работать, но следует отметить, что для этого, вероятно, потребуется значительно больше усилий, чем другие решения. Тем не менее, это дает вам более ограниченный контроль, поэтому в зависимости от вашей конечной цели это может оказаться полезным. – CmdrMoozy

+0

Это тоже отличный вариант, и ответы вроде этого - то, на что я надеялся, но просто случается, что в этом случае я не буду использовать openGL. Но спасибо за распространение идеи –