Как я очищаю консоль и в Windows и в Linux с помощью C++

Я не уверен, есть ли какой-нибудь простой способ сделать это, но вы можете попробовать запустить Mocha программно .

Вот немного грязная версия того, что это могло

data.js

var Promise = require('bluebird')

module.exports.tests = []

function getTests () {
  return Promise.resolve('kitty pancake')
  .delay(500)
  .then(function (value) {
     module.exports.tests = [
      {
        'arg': 'kitty',
        'expect': value
      },
      {
        'arg': 'doggy',
        'expect': 'doggy pancake'
      }
    ]
  })
}

module.exports.getTests = getTests

test-launcher.js

var Mocha = require('mocha'),
    fs = require('fs'),
    path = require('path')

// First, you need to instantiate a Mocha instance.
var mocha = new Mocha()

// Then, you need to use the method "addFile" on the mocha
// object for each file.

// Here is an example:
fs.readdirSync('test').filter(function(file){
    // Only keep the .js files
    return file.substr(-3) === '.js'

}).forEach(function(file){
    // Use the method "addFile" to add the file to mocha
    mocha.addFile(
        path.join('test', file)
    )
})

// make sure your tests are loaded before running the tests
require('./data').getTests().then(function () {

  // Now, you can run the tests.
  mocha.run(function(failures){
    process.on('exit', function () {
      process.exit(failures)
    })
  })
})

test/index.js

var assert = require('assert')

var tests = require('../data').tests

var fn = function (value) {
  return value + ' ' + 'pancake'
}

describe('test', function () {
  describe('example', function () {
    tests.forEach(function (test) {
      it('should return ' + test.expect, function (){
        var value = fn(test.arg)
        assert.equal(value, test.expect)
      })
    })
  })
})

Затем вы можете запустить ваши остатки, запустив test-launcher.js.

26
задан 2 revs, 2 users 100% 3 November 2008 в 13:05
поделиться

5 ответов

Короткий ответ: Вы не можете.

Более длинный ответ: Пользуйтесь библиотекой проклятий (ncurses на Unix, pdcurses в Windows). NCurses должен быть доступным через Ваш диспетчер пакетов, и и ncurses и pdcurses имеют тот же самый интерфейс (pdcurses, может также создать окна независимо из консоли, которые ведут себя как консоли).

самый трудный ответ: Используйте #ifdef _WIN32 и материал как этот, чтобы заставить Ваш код действовать по-другому на различные операционные системы.

28
ответ дан 2 revs, 2 users 92% 15 October 2019 в 06:50
поделиться

На Linux возможно очистить консоль. Самый прекрасный путь состоит в том, чтобы записать следующую escape-последовательность в stdout:

write(1,"\E[H\E[2J",7);

, который является тем, что /usr/bin/clear делает без издержек создания другого процесса.

13
ответ дан 2 revs 15 October 2019 в 06:50
поделиться

Нет никакой групповой команды к , очищают консоль на обеих платформах .

#include <cstdlib>

void clear_screen()
{
#ifdef WINDOWS
    std::system("cls");
#else
    // Assume POSIX
    std::system ("clear");
#endif
}
53
ответ дан 2 revs, 2 users 68% 15 October 2019 в 06:50
поделиться

Я знаю, что это не отвечает на мой собственный вопрос, но! Это работает на Windows (#include <windows.h>):

void clrscr()
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord = {0, 0};
    DWORD count;

    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(hStdOut, &csbi);

    FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

    SetConsoleCursorPosition(hStdOut, coord);
}
2
ответ дан yxk 15 October 2019 в 06:50
поделиться

Это - то, как Вы делаете это на любой другой платформе, но это не работает в Windows:

cout << "\f";

, Возможно, необходимо будет сделать условную компиляцию:

void clrscr()
{
#ifdef _WIN32
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD coord = {0, 0};
    DWORD count;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(hStdOut, &csbi);
    FillConsoleOutputCharacter(hStdOut, ' ',
                               csbi.dwSize.X * csbi.dwSize.Y,
                               coord, &count);
    SetConsoleCursorPosition(hStdOut, coord);
#else
    cout << "\f";
#endif
}
3
ответ дан Adam Pierce 15 October 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: