Сотрите текущую печатную консольную строку

У меня есть несколько вопросов, ответ на которые поможет нам понять, что происходит не так.

  1. Хотите показать карту или просто использовать PositioningManager?
  2. Если вы используете только PositionManager, инициализируете ли вы MapEngine изначально?

Если вы не используете не используйте Map, вы должны сделать что-то подобное, так как PositionManager не инициализирует MapEngine сам по себе.

ApplicationContext context = new ApplicationContext(getApplicationContext());
MapEngine.getInstance().init(context, new OnEngineInitListener() {

  @Override
  public void onEngineInitializationCompleted(OnEngineInitListener.Error error) {
    if (error == OnEngineInitListener.Error.NONE) {

    } else {

    }
  }
});

Обновление: на github есть еще одно тестовое приложение, которое может быть весьма полезным, без использования карты, но с использованием менеджера позиции. Надеюсь это поможет! https://github.com/heremaps/here-android-sdk-examples/tree/master/speed-limit-watcher

61
задан MD XF 27 February 2017 в 23:44
поделиться

5 ответов

Вы можете использовать escape-коды VT100 . Большинство терминалов, включая xterm, поддерживают VT100. Для стирания строки это ^ [[2K . В языке C это дает:

printf("%c[2K", 27);
62
ответ дан 24 November 2019 в 17:04
поделиться

под окнами 10 можно использовать стиль VT100 путем активации режима VT100 в текущей консоли для использования escape-последовательностей следующим образом:

#include <windows.h>
#include <iostream>

#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#define DISABLE_NEWLINE_AUTO_RETURN  0x0008

int main(){

  // enabling VT100 style in current console
  DWORD l_mode;
  HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  GetConsoleMode(hStdout,&l_mode)
  SetConsoleMode( hStdout, l_mode |
            ENABLE_VIRTUAL_TERMINAL_PROCESSING |
            DISABLE_NEWLINE_AUTO_RETURN );

  // create a waiting loop with changing text every seconds
  while(true) {
    // erase current line and go to line begining 
    std::cout << "\x1B[2K\r";
    std::cout << "wait a second .";
    Sleep(1);
    std::cout << "\x1B[2K\r";
    std::cout << "wait a second ..";
    Sleep(1);
    std::cout << "\x1B[2K\r";
    std::cout << "wait a second ...";
    Sleep(1);
    std::cout << "\x1B[2K\r";
    std::cout << "wait a second ....";
 }

}

посмотрите следующую ссылку: окна VT100

0
ответ дан 24 November 2019 в 17:04
поделиться

Вы можете использовать \ r ( возврат каретки ), чтобы вернуть курсор в начало строки:

printf("hello");
printf("\rbye");

Это напечатает пока на той же линии. Однако он не удалит существующие символы, и поскольку пока короче, чем привет , вы получите пока . Чтобы стереть его, вы можете сделать новый отпечаток длиннее, чтобы перезаписать лишние символы:

printf("hello");
printf("\rbye  ");

Или сначала сотрите его с несколькими пробелами, затем напечатайте новую строку:

printf("hello");
printf("\r          ");
printf("\rbye");

Это напечатает hello , затем перейдите в начало строки и замените его пробелами, затем снова вернитесь в начало и выведите пока .

54
ответ дан 24 November 2019 в 17:04
поделиться

Обычно, когда у вас есть '\ r' в конце строки, печатается только возврат каретки без перевода строки. Если у вас есть следующее:

printf("fooooo\r");
printf("bar");

, вывод будет:

barooo

Я могу предложить одну вещь (возможно, обходной путь) - иметь строку фиксированного размера с завершением NULL, которая инициализируется всеми пробелами и заканчивается на '\ r '(каждый раз перед печатью), а затем используйте strcpy, чтобы скопировать в нее вашу строку (без новой строки), поэтому каждая последующая печать будет перезаписывать предыдущую строку. Примерно так:

char str[MAX_LENGTH];        
// init str to all spaces, NULL terminated with character as '\r'
strcpy(str, my_string);       // copy my_string into str
str[strlen(my_string)] = ' '; // erase null termination char
str[MAX_LENGTH - 1] = '\r';
printf(str);

Вы можете выполнить проверку ошибок, чтобы длина my_string всегда была как минимум на единицу меньше, чем str , но вы поняли основную идею.

3
ответ дан 24 November 2019 в 17:04
поделиться

Вы можете удалить строку, используя \ b

printf("hello");
int i;
for (i=0; i<80; i++)
{
  printf("\b");
}
printf("bye");
4
ответ дан 24 November 2019 в 17:04
поделиться
Другие вопросы по тегам:

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