следующий символ на месте предыдущего (вывод последовательности затерающихся символов)
Модератор: Модераторы разделов
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
следующий символ на месте предыдущего
Всем привет.
Вот такой вопросик: как вывести на экран последовательность символов, но при этом каждый последующий символ должень быть на месте предыдущего.
Спасибо
Вот такой вопросик: как вывести на экран последовательность символов, но при этом каждый последующий символ должень быть на месте предыдущего.
Спасибо
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
-
- Сообщения: 482
-
- Бывший модератор
- Сообщения: 5989
- ОС: OS X, openSuSE, ROSA, Debian
Re: следующий символ на месте предыдущего
Stauffenberg писал(а): ↑11.12.2008 15:39Всем привет.
Вот такой вопросик: как вывести на экран последовательность символов, но при этом каждый последующий символ должень быть на месте предыдущего.
Спасибо
в смысле так:
Код: Выделить всё
for i in `seq 0 9`; do echo -ne "\r$i";sleep 2; done;
?
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: следующий символ на месте предыдущего
Женя Подсыпальников, diesel:
Спасибо, но...
Я прошу прощения - это была моя ошибка.
На С/С++ (;
Спасибо, но...
Я прошу прощения - это была моя ошибка.
На С/С++ (;
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
-
- Сообщения: 482
Re: следующий символ на месте предыдущего
А мне тут слово понравилось: символ "забоя"... 

Пойдём на рыбалку !
-
- Сообщения: 2041
- Статус: ☮ PEACE ☮
- ОС: открытая и свободная
Re: следующий символ на месте предыдущего
пасиб! попробую дома послать пару символов "на забой"
Labor omnia vincit
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
"Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.” (Brian Kernighan)
-
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: следующий символ на месте предыдущего
совсем похожая задача, тоже на С.
Вывести например последние 5 строк файл, подобие команды tail.
Думаю сначала попасть на конец файла
Потом подняться вверх на 6 символов '\n' ну и вывести всё что после.
Хотелось бы услышать, правильный ли ход моих мыслей?!
Заранее спасибо.
Вывести например последние 5 строк файл, подобие команды tail.
Думаю сначала попасть на конец файла
Код: Выделить всё
lseek(fp,0,SEEK_END)
Потом подняться вверх на 6 символов '\n' ну и вывести всё что после.
Хотелось бы услышать, правильный ли ход моих мыслей?!
Заранее спасибо.
-
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: следующий символ на месте предыдущего
а чего не сразу
lseek(fp,-6,SEEK_END)
lseek(fp,-6,SEEK_END)
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
-
- Сообщения: 1263
- ОС: Linux Debian
Re: следующий символ на месте предыдущего
diesel писал(а): ↑11.12.2008 16:21в смысле так:?Код: Выделить всё
for i in `seq 0 9`; do echo -ne "\r$i";sleep 2; done;
В принципе верно, но в исходном вопросе было только :
Stauffenberg писал(а): ↑11.12.2008 15:39как вывести на экран последовательность символов, но при этом каждый последующий символ должень быть на месте предыдущего.
И не было указано, что этот символ будет в начале строки. А в этом примере \r будет возвразать вывод именно в начало строки.
Поэтому тут надо заменить \r на \b
Кстати, это же касается и программ на C/C++. После вывода любого печатного знака курсор сместится к следующей позиции и чтобы его вернуть на предыдущую позицию, надо вывести знак с кодом 8, т.е. putchar(8); или putchar('\b');
Надо только учитывать, что вывод в stdout буферизуется до вывода перевода строки, поэтому может понадобиться добавка fflush(stdout);
Я бы не сказал, что похожая
кодировщик писал(а): ↑11.12.2008 17:56Вывести например последние 5 строк файл, подобие команды tail.
Думаю сначала попасть на конец файла
Код: Выделить всё
lseek(fp,0,SEEK_END)
Потом подняться вверх на 6 символов '\n' ну и вывести всё что после.
Хотелось бы услышать, правильный ли ход моих мыслей?!
Ход мыслей правильный, только что значит "поднаться вверх на 6 символов '\n' ?
Т.е. можно написать
Код: Выделить всё
lseek(fp,-N,SEEK_END)
Если длина строк не будет превышать 100 знаков, то можно в качестве N использовать 600 (надо только учитывать, что при кодировке UTF-8 русские буквы будут занимать по 2 байта). А если будут строки длиной по 100 тыс знаков?
Но в принципе верно. После
Код: Выделить всё
lseek(fp,-N,SEEK_END)
Код: Выделить всё
j=0;
for(i=N-2;i;i--)
if((buff[i]=='\n')&&(++j==5)) break;
подняться вверх на 5 строк. Ну и потом вывести эти строки на экран чем-то типа:
Код: Выделить всё
write(1,c+i,N-i);
(код не проверял, поэтому за правильность не отвечаю).
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: следующий символ на месте предыдущего
Ход мысли неправильный, если рассматривать это не как исключительно искусственную учебную задачу. 1). tail работает не только с файлами, но и, например, с pipe'ами. 2). Делать искусственные предположения и ограничения (на длину строки, например) -- нехорошо.MiK13 писал(а): ↑11.12.2008 22:09кодировщик писал(а): ↑11.12.2008 17:56Вывести например последние 5 строк файл, подобие команды tail.
Думаю сначала попасть на конец файла
Код: Выделить всё
lseek(fp,0,SEEK_END)
Потом подняться вверх на 6 символов '\n' ну и вывести всё что после.
Хотелось бы услышать, правильный ли ход моих мыслей?!
Ход мыслей правильный
Мои розовые очки
-
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: следующий символ на месте предыдущего
Предложения могут быть разной длины. Не известно ведь из скольких символов каждое состоит, поэтому
думаю нужно пользоваться escape-символом '\n', теперь вот не могу въехать как из конца файла
подниматься по символах к началу файла?!

-
- Сообщения: 482
Re: следующий символ на месте предыдущего
Код: Выделить всё
void testIt(char* pstrTest)
{
if (pstrTest) {
char* pstrTemp = pstrTest;
while (*pstrTemp) {
cout << *pstrTemp;
if (*(++pstrTemp)) {
cout << '\b';
}
}
}
}
Но в ассемблях, гутарят,
код машине - буде много кратче да живче

Пойдём на рыбалку !
-
- Сообщения: 1263
- ОС: Linux Debian
Re: следующий символ на месте предыдущего
кодировщик писал(а): ↑12.12.2008 09:29Предложения могут быть разной длины. Не известно ведь из скольких символов каждое состоит, поэтому
думаю нужно пользоваться escape-символом '\n', теперь вот не могу въехать как из конца файла
подниматься по символах к началу файла?!
Есть какие-то функции отображения файлов в память. Я ими пока ещё ни разу не пользовался. Но если это можно, то можно просто пройтись по памяти (в которую отображён файл) вниз и найти 6-й знак перевода строки. Примерно так, как я писал раньше.
Правда, остаётся не ясным вопрос о длине строк -- что под ними понимать? Можно как последовательность знаков, заканчивающуюся знаком перевода строки (10), а можно -- как строку, которая отображается на экране. На котором врядли может поместиться больше 200-300 знаков.