문제

라인 피드를 넣는 것만으로는 충분하지만, 캐리지 리턴 + 라인 피드가되어야한다는 것을 알고 있습니다. 캐리지 리턴을하지 않고 라인 피드 만 사용하면 끔찍한 일이 발생합니까?

이것은 ANSI C에 있으며 파일이나 다른 것으로 리디렉션되지 않을 것입니다. 일반 콘솔 앱입니다.

도움이 되었습니까?

해결책

Windows 콘솔은 파일 또는 실제 물리적 터미널의 문제에 대해 동일한 라인 종료 컨벤션을 따릅니다. 다음 줄로 올바르게 이동하려면 CR과 LF를 모두 볼 필요가 있습니다.

즉, ANSI C 프로그램과 그 콘솔 사이에는 많은 소프트웨어 인프라가 있습니다. 특히, 모든 표준 C 라이브러리 I/O 함수는 기회를 허용한다고 가정 할 때 올바른 일을하려고합니다. 이는 이유 fopen()'에스 t 그리고 b 에 대한 수정 자 mode 매개 변수가 정의되었습니다.

와 함께 t (대부분의 스트림의 기본, 특히 stdin 그리고 stdout) 그럼 \n 인쇄 된 인쇄는 CRLF 시퀀스로 변환되며 판결은 읽기에 대해 발생합니다. 그 행동을 끄려면 사용하십시오 b 수정 자.

또한 터미널은 전통적으로 XTREM에 의해 모방 된 DEC VT100을 포함하여 *닉스 박스에 연결되어 CR과 LF가 모두 필요합니다. 그러나 *닉스 월드에서는 Newline 문자에서 CRLF 시퀀스로의 변환이 TTY 장치 드라이버에서 처리되므로 대부분의 프로그램은 이에 대해 알 필요가 없습니다. t 그리고 b 수정자는 모두 무시됩니다. 해당 플랫폼에서 수정없이 TTY에서 문자를 보내고받을 필요가있는 경우 STTY (1) 또는 시스템이 의존하는 시스템을 찾아야합니다.

그렇지 않으면 Ansi C 프로그램이 콘솔에 C 라이브러리 I/O를 피하는 경우 (아마도 콘솔의 문자 색상 및 기타 속성에 대한 액세스가 필요하기 때문에 CR을 보내야하는지 여부는 사용중인 Win32 API 호출에 따라 다릅니다. 캐릭터를 보내기 위해.

다른 팁

당신이 *nix 환경에 있다면 n (linefeed)은 아마 괜찮을 것입니다. Windows에 있고 리디렉션하지 않는 경우 (현재) 라인 피드도 괜찮습니다.

Windows를 수행하는 경우 출력이 텍스트 파일로 리디렉션되고 다른 프로세스가 데이터를 소비하려고 시도하면 문제가있을 수 있습니다.

콘솔은 무엇을 보여줄지 알고 있지만 소비자는 행복하지 않을 수도 있습니다 ...

C#을 사용하는 경우 환경을 사용해 볼 수 있습니다. Newline "Constant".

http://msdn.microsoft.com/en-us/library/system.environment.newline.aspx

당신이 정말로 바닐라 C에 있다면, 당신은 r n에 갇혀 있습니다. :-)

그것은 당신이 그들을 위해 사용하는 것에 달려 있습니다. 두 가지를 두지 않으면 일부 프로그램은 최신 라인을 제대로 표시하지 않습니다. \r 그리고 \n.

글을 쓰려고한다면 \n 텍스트 파일 (또는 출력)을 소비하는 일부 프로그램은 여러 줄 대신 텍스트를 단일 줄로 표시 할 수 있습니다.

둘 다 사용하지 않고 완전히 유효하지 않은 파일 형식과 프로토콜도 있습니다. \r 그리고 \n.

나는 오랫동안 그것을 시도하지 않았기 때문에 내가 무슨 일이 일어나는지 잘 모르겠지만 ... 라인 피드 자체가 왼쪽 열로 돌아 오지 않고 줄을 아래로 이동하지 않습니까?

컴파일러에 따라 표준 출력이 텍스트 모드로 열 수 있으며,이 경우 단일 라인 피드가 작성되기 전에 r n으로 변환됩니다.

편집하다: 방금 빠른 테스트를 시도했고 XP에서는 반품이없는 파일이 정상적으로 표시됩니다. 나는 여전히 컴파일러가 당신을 위해 반환을 삽입하는지 여부를 아직도 모른다.

C에서 파일 ( "스트림"이라고 함)은 이진 또는 텍스트의 두 가지 맛으로 제공됩니다.

이 차이점의 의미는 왼쪽 구현/플랫폼에 종속적이지만 텍스트 스트림에 쓸 때 Windows (내가 본 공통 구현)에서 " n '에 자동으로" r n "으로 번역되고 텍스트를 읽을 때 스트림 " r n"은 자동으로 ' n'으로 번역됩니다.

"콘솔"은 실제로 "표준 출력"이며 기본적으로 텍스트 스트림으로 열리는 스트림입니다. 따라서 실제로 Windows에서 "Hello, World! n"을 작성하는 것은 매우 충분하고 휴대용이어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top