|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 29, 2004 16:02:08 Сабж вобщем-то. Когда вместе с символом \n нужно использовать символ \r (возврат-каретки)? Например при консольном выводе строка должна оканчиваться на 13,10 или достаточно просто 10 ? |
|
|
Дата: Июн 29, 2004 18:12:58 Везде по разному. В консоли достаточно только \n, в текстовых файлах под dos и винду - \r\n, под linux - тоже только \n. |
|
|
Дата: Июн 29, 2004 19:04:55 В маках(скорее всего до Mac OS X) - только \r. Под unix/unix-like - хватает \n. А вообще это уже было(поиск по CR&LF) |
|
|
Дата: Июн 29, 2004 19:43:33 В MessageBox достаточно 13. |
|
|
Дата: Июн 29, 2004 20:49:29 Запутали %) Quantum 13 - это \r ? ну и как же оно прыгнет на новую строку? |
|
|
Дата: Июн 29, 2004 21:16:34 · Поправил: Shift Это в сях "\r".А на асме это походу 13(в десятичной системе).Парсер смотрит байтики и если это например 13,10 - делает переход на новую строку. |
|
|
Дата: Июн 29, 2004 21:25:01 Shift Нет, \n это 0Ah оно же 10 если не так то я вообще ниччё не понимаю ;-) |
|
|
Дата: Июн 29, 2004 21:26:23 Ага, поправил ;-) А если это просто 10 что? не делает? ;-) |
|
|
Дата: Июн 29, 2004 21:41:30 Asterix Тоже |
|
|
Дата: Июн 30, 2004 06:49:34 · Поправил: q_q Asterix Использование \n или \n\r в Си/Си++ имеет отношение к translation mode, который является атрибутом _текстового_ файла/потока и влияет на функции ввода-вывода. Если поток открыт как бинарный, то программа отвечает за все байты, в противном случае библиотека ввода-вывода осуществляет дополнительный анализ, например, символ с кодом 26 (1Ah) явняется признаком конца файла, даже если за ним есть что-либо и реальный размер файла больше. В случае newline character, библиотека ввода-вывода под dos будет преобразовывать его в пару 0d+0a, под unix - 0a, под mac - 0d. при консольном выводе Через функции printf, fprintf(stdout/stderr... и WriteFile(GetStdHandle(STD_OUTPUT_HANDLE) ... достаточно /n. Под asm'ом это эквивалентно 0a. |
|
|
Дата: Июн 30, 2004 08:57:51 q_q /n. Под asm'ом это эквивалентно 0a. Не думаю. 0а - это переход на новую строку _без_ возврата каретки, => при выводе на консоль курсор лишь смещается вниз на одну позицию. (У меня в Виндовс это так.) |
|
|
Дата: Июн 30, 2004 10:14:05 Anonimka Не думаю. Ты не думай, а проверяй на практике. У меня в Виндовс это так. Огласи методику эксперимента. У меня работает такой код .386
.model flat, stdcall
option casemap :none
.nolist
include windows.inc
include kernel32.inc
.list
includelib kernel32.lib
.data
szTestWriteConsoleA db 'WriteConsoleA 1', 0ah
db 'WriteConsoleA 2', 0ah
db 0
even
szTestWriteFile db 'WriteFile 1', 0ah
db 'WriteFile 2', 0ah
db 0
even
szTestPrintf db 'printf 1', 0ah
db 'printf 2', 0ah
db 0
even
szMsvcrt db 'msvcrt',0
even
szPrintf db 'printf',0
.code
even
TestWriteConsoleA proc
push eax ; room for lpNumberOfCharsWritten
push 0 ; lpReserved
lea eax,[esp+4]
push eax ; lpNumberOfCharsWritten
push [esp+10h]
call lstrlen
push eax ; nNumberOfCharsToWrite
push [esp+14h] ; pBuffer
push STD_OUTPUT_HANDLE
call GetStdHandle
push eax ; hConsoleOutput
call WriteConsoleA
pop eax ; free room
retn 4
TestWriteConsoleA endp
even
TestWriteFile proc
push eax ; room for lpNumberOfCharsWritten
push 0 ; lpReserved
lea eax,[esp+4]
push eax ; lpNumberOfCharsWritten
push [esp+10h]
call lstrlen
push eax ; nNumberOfCharsToWrite
push [esp+14h] ; pBuffer
push STD_OUTPUT_HANDLE
call GetStdHandle
push eax ; hConsoleOutput
call WriteFile
pop eax ; free room
retn 4
TestWriteFile endp
even
TestPrintf proc
push offset szMsvcrt
call LoadLibrary
test eax,eax
jz short @@2
push eax ; for call FreeLibrary
push offset szPrintf
push eax
call GetProcAddress
test eax,eax
jz short @@1
mov ecx,[esp+8]
push ecx
call eax
pop ecx
@@1:
call FreeLibrary
@@2:
retn 4
TestPrintf endp
main proc
push offset szTestWriteConsoleA
call TestWriteConsoleA
push offset szTestWriteFile
call TestWriteFile
push offset szTestPrintf
call TestPrintf
push 0
call ExitProcess
main endp
end main |
|
|
Дата: Июн 30, 2004 10:31:51 q_q А ты попробуй сначала type file.txt (с соответствующим содержимым), а потом уже и пену у рта пузыряй. |
|
|
Дата: Июн 30, 2004 10:38:20 q_q Кстати, вопрос был достаточно общим, чтобы ограничиваться win api. А твоя эта WriteConsole, между прочим, работает как WriteFile, то есть, пишет как в файл, а не как на консоль, что есть-таки две большие разницы. |
|
|
Дата: Июн 30, 2004 11:07:27 Anonimka попробуй сначала type file.txt Попробовал w2ksp4. Содержимое 31 0A 31 0A 31 0A. В результате три единицы в разных строках. пишет как в файл, а не как на консоль, что есть-таки две большие разницы Я сразу писал, что \n и \r имеют отношение к текстовым файлам/потокам. На консоль, по-твоему - это в видеопамять как под dos 0B800h? вопрос был достаточно общим, чтобы ограничиваться win api msvcrt.printf - это winapi? а потом уже и пену у рта пузыряй Не лезь в бутылку (вдруг ты не прав), а приводи аргументы. Дай свое определение консоли и еще раз прошу огласи свои условия эксперимента в котором 0Ah не переводит курсор на новую строку. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.062 |