2015-04-19 2 views
2

я имею проблемы с этим кодом:не в состоянии сделать возврат каретки работать на Linux

#include <iostream> 
#include <math.h> 
#include <unistd.h> 
#include <string> 
#include <iostream> 
#include <stdio.h> 

using std::cout; using std::cerr; 
using std::cin; using std::string; 
using std::endl; 

int main(int argc,char* argv[]) 
{ 
    for(int x = 0; x <= 2013; x++) 
    { 

     cout << "Iteration: "<< x << "\r"; 
     cout << ""; 

    } 

    return 0; 
} 

я нужен мой код, чтобы напечатать «Итерация: 0», а не просто обновить, что 0 до 1,2, 3,4 .... все на одной консоли. Я использовал возврат каретки, но он не работает, строка печатается одна за другой, когда я использую «\ n». Окружающая среда - 64-разрядная версия Linux. IDE - eclipse 8.01.

+0

@iamkrillin: Linux _не_ использовать '\ r', во всяком случае. –

+2

Невозможно воспроизвести. Я бы посоветовал ручную очистку между итерациями, но недостаток этого не должен приводить к описанному вами поведению. Есть ли что-то особенное в эмуляторе терминала, который вы используете? – Wintermute

+0

Ваш код работает для меня. – Galik

ответ

-1

Вы должны поместить его в начале строки:

cout << "\rIteration: "<< x; 

EDIT: Я проверил эту модификацию кода оригинального OP и печатает то, что он хочет. Также, Oh dear look what I've found.

Кроме того, как это было предложено @Wintermute, вы можете сделать следующее внутри для цикла, для лучшей визуализации:

cout << "\rIteration: "<< x << std::flush; 
sleep(1); 
+0

http://coliru.stacked-crooked.com/a/0d4d1a945a0f3485 – chris

+0

@chris вы не можете проверить его в coliru (я тоже пытался в идеоне), но он работает в обычном терминале linux. То же самое происходит с некоторыми интегрированными терминалами IDE (например, QtCreator's) –

+2

Так оно и есть. Тем не менее, код в вопросе работает; разница только в том, где курсор заканчивается, как только все закончится. И когда это показано, это вопрос промывки. – Wintermute

Смежные вопросы