Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / вопрос по возврату каретки / 21 сообщений из 21, страница 1 из 1
14.02.2006, 11:04
    #33542856
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
как должен работать возврат каретки?

например в винде

сишный код
printf("hello\rddd");

печатает ddd

а скриптовые - perl,tcl,python,gawk
печатают dddlo

казалось бы - скрипты работают логично а C затирает предыдущий вывод

как объяснить сей эФФект?
...
Рейтинг: 0 / 0
14.02.2006, 11:12
    #33542881
CrLf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
интересно - в C все работает нормально если в конце строки есть \n

похоже поэтому и интерпреатторы нормально - по умолчанию они завершают строку
а если в perl не писать \n то тоже символы стирает.
В чем причина?
...
Рейтинг: 0 / 0
14.02.2006, 11:16
    #33542896
CrLf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
терминал...
...
Рейтинг: 0 / 0
14.02.2006, 18:30
    #33544594
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
Возьми другой С.
Если у тебя "hello\rddd" возвращает один только "ddd", то у тебя кривой C-компилятор и кривые библиотеки к нему.
...
Рейтинг: 0 / 0
14.02.2006, 22:34
    #33544910
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
White Owl ты не прав

во-первых - я пробовал на разных компиляторах и в разных ОС.
А во-вторых - это действительно терминал:

если перенаправить hello\rddd в файл : ./a.out > file.txt

то в файле будет dddlo если просматривать скажем редактором vi
а если сделать cat file.txt - то будет именно ddd

В файле - порядок
следовательно, проблема не в C или его либах, а в настройках терминала
и особенностях вывода (в частности, stdio printf, или cat)
...
Рейтинг: 0 / 0
14.02.2006, 22:57
    #33544925
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
CrLFWhite Owl ты не правЯ прав :) Просто я никак не мог предположить, что человек берется изучать служебные символы на ненастроенном компе.

CrLFто в файле будет dddlo если просматривать скажем редактором vi
а если сделать cat file.txt - то будет именно dddУгу... при этом не надо забывать что vi самостоятельно обрабатывает служебные символы, а cat отдает все символы из файла как поток на обработку getty или что там у тебя стоит в качестве драйвера консоли.
...
Рейтинг: 0 / 0
14.02.2006, 23:10
    #33544942
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
авторЯ прав :) Просто я никак не мог предположить, что человек берется изучать служебные символы на ненастроенном компе.

в топике собственно указывалось, что начальные эксперименты проводились в винде. Не помню, чтобы cmd.exe надо было как-то правильно настраивать :-)
Хотя готов послушать - какой же в винде должен быть $TERM и как работать в винде с termcap :-)
...
Рейтинг: 0 / 0
14.02.2006, 23:11
    #33544944
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
особенно после того, как я же и написал, что проблема в терминале :-)
...
Рейтинг: 0 / 0
14.02.2006, 23:16
    #33544949
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
да кстати интересно - запустил сейчас дома в XP - выводит dddlo, то есть все нормально

просто командные интерпретаторы отличаются в работе ввода-вывода у W2k и XP значит.
...
Рейтинг: 0 / 0
14.02.2006, 23:33
    #33544962
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
В каком месте говорилось про винды простите? Вот использование типичных юниксовых вещей вижу, ни одного указания на винды не вижу.

На W2K команда printf("12345\r678") печатает 67845. Проверено на BCC 5.5, VC6, VC 2003. Все делали Win32 Console Application.
Какой компилятор ты использовал? MinGW под Cygwin'ом?
...
Рейтинг: 0 / 0
14.02.2006, 23:40
    #33544967
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
вот моя цитата

CrLFнапример в винде

сишный код
printf("hello\rddd");

печатает ddd

вообще я пробовал в винде через gcc и Visual C++ 5.0
Как Win32, конечно.

а сейчас ваще шизую. С XP

посмотри:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
main()
{
        char s[ 40 ];
        int i;
      
        memset(s, 0 ,sizeof(s));
        strcpy(s,"hello\rddd");
       


        for(i= 0 ;i<=strlen(s);i++)
        {
         _write( 1 ,&s[i], 1 );
         }

}

такой код у них печатает вообще "dddаo" но "а" при этом совсем не "а" :-)
что видно в файлике. Кракозябра там как надо. Просто у них так преобразует.
С мастдаей все ясно.

А кстати как надо похимичить с unix чтоб printf("hello\rddd")
вывелся не удаляя символы? Я поигрался - терминалы разные пробовал, но не помогает. Замутить с termcap что-то? Как настроить?
Все остальнгл работает нормально (текстовые проги, vi и т.п.)
...
Рейтинг: 0 / 0
15.02.2006, 18:24
    #33547390
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
CrLFа сейчас ваще шизую. С XPДействительно шизуешь. Посмотри внимательнее на свое условие цикла. Ты пытаешься печать не только строку, но и нулевой символ ограничивающий строку. Естественно что там у тебя появляются кракозябры. Посмотри в своем шрифте что стоит на месте нулевого символа и увидишь свою кракозябру.

CrLFС мастдаей все ясно.Да, да... конечно. Именно мастдай виноват в том, что ты не умеешь со строками работать.

CrLFА кстати как надо похимичить с unix чтоб printf("hello\rddd")
вывелся не удаляя символы?
Не знаю. У меня \r перебрасывает курсор на начало строки ничего не затирая... На всех доступных мне ОС и консолях :)
...
Рейтинг: 0 / 0
15.02.2006, 18:59
    #33547457
DarkSquid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
Ну что вы в самом деле, как не знаю кто! Просто там приглашение командной строки печатается сразу после ddd. Это приглашение и затирает lo. Затирает интерпретатор команд, а не терминал.
...
Рейтинг: 0 / 0
15.02.2006, 19:07
    #33547472
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
DarkSquidНу что вы в самом деле, как не знаю кто! Просто там приглашение командной строки печатается сразу после ddd. Это приглашение и затирает lo. Затирает интерпретатор команд, а не терминал.В виндах? Тамошний интерпретатор автоматически делает \r\n.
...
Рейтинг: 0 / 0
15.02.2006, 21:10
    #33547637
DarkSquid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
Так с третьего поста ясно, что не винды.

А в XP - нормально dddаo печатает
...
Рейтинг: 0 / 0
15.02.2006, 22:39
    #33547723
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
White Owl да, со строкой я маху дал. все нормально если i<=strlen(s)

и все-таки printf("hello\rddd"); в W2k на VC 5.0 работает криво.

и еще - ты не знаешь как все-таки настроить терминал в юнихе чтобы правильно работало?
...
Рейтинг: 0 / 0
16.02.2006, 00:10
    #33547778
DarkSquid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
export PS1="\n$PS1"
...
Рейтинг: 0 / 0
16.02.2006, 00:15
    #33547781
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
CrLFи все-таки printf("hello\rddd"); в W2k на VC 5.0 работает криво.Вот мы наконец и пришли к тому с чего начинали :)
"у тебя кривой C-компилятор и кривые библиотеки к нему."

CrLFи еще - ты не знаешь как все-таки настроить терминал в юнихе чтобы правильно работало?Знаю.
Но я не знаю какой юникс у тебя и какой у твоего юникса терминал.
...
Рейтинг: 0 / 0
16.02.2006, 00:54
    #33547803
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
автор"у тебя кривой C-компилятор и кривые библиотеки к нему."

не хочу быть назойливым, но в XP тот же компилятор - и все хорошо.

а по поводу unix - ты просто запость свой termcap и терминал
...
Рейтинг: 0 / 0
16.02.2006, 00:56
    #33547804
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
пять же - gcc так же работал, так что на компилятор как-то трудно свалить
...
Рейтинг: 0 / 0
16.02.2006, 09:15
    #33548059
CrLF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
вопрос по возврату каретки
вопрос снят, разобрался почему
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / вопрос по возврату каретки / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]