콘솔에서 getc로 \r(캐리지 리턴) vs \n(새 줄) 읽기?
저는 기본적으로 사용자가 "입력"을 누를 때까지 기다렸다가 뭔가를 하는 기능을 쓰고 있습니다.테스트할 때 작동하는 것은 다음과 같습니다.
#include <stdio.h>
int main()
{
int x = getc(stdin);
if (x == '\n') {
printf("carriage return");
printf("\n");
}
else {
printf("missed it");
printf("\n");
}
}
제게 궁금한 점은, 그리고 처음에 시도했던 것은 다음과 같습니다.if (x == '\r')
그런데 테스트를 해보니까 제가 엔터를 치는 걸 못 잡았거든요.'\n'
내가 콘솔에서 엔터를 치는 것에 해당하는 것 같습니다.누가 차이점을 설명해 줄 수 있습니까?또한 확인하기 위해 다음과 같이 적습니다.if... == "\n"
문자 문자열 리터럴을 의미합니까? 즉, 사용자는 문자 그대로 입력해야 합니다."\n"
콘솔에서, 맞지요?
\n
는 새로운 줄 문자입니다.\r
캐리지 리턴입니다.그들은 그들을 사용하는 것이 다릅니다.윈도우 사용\r\n
Enter 키를 눌렀다는 것을 나타내는 것은 Linux와 Unix가 사용합니다.\n
Enter 키를 눌렀음을 나타냅니다.
그래서 항상 제가.\n
모두가 사용하기 때문입니다. 그리고if (x == '\n')
캐릭터의 평등성을 검증하는 적절한 방법입니다.
'\n'은 "Line Feed"이고 '\r'은 캐리지 리턴입니다.운영 체제마다 새로운 라인을 다음과 같은 다른 방식으로 처리 방법은 다음과 같습니다.
창문들
새 행이 '\r\n' 두 문자의 조합이어야 합니다.
리눅스\유닉스 및 모던 맥 OS
새 행에 '\n' 하나를 사용합니다.
클래식 맥 OS
새 행에 '\r' 하나를 사용합니다.
기본적으로 제가.if (x == '\n')
현재 모든 현대 운영 체제에서 사용되고 있기 때문입니다.
프로그래밍 언어 런타임, 텍스트 편집기, OS 등 새 줄을 나타내는 여러 수준의 추상화가 있습니다. CR(캐리지 리턴)과 LF(라인 피드)는 ASCII에 정의된 두 개의 제어 문자입니다.일부 다른 문자 부호화에서는 "새 줄" 문자를 정의할 수도 있습니다.키보드의 Enter 키는 "다음 줄의 시작"을 의미합니다.키보드는 Enter 키를 해당 컨트롤 문자 또는 문자에 매핑하는 방법을 결정합니다.일부 키보드는 Enter 키와 Return 키를 구분하기도 합니다. Enter 키를 새 줄로 지정하고 Return 키를 캐리지로 지정합니다.표준 ANSI 키보드에는 ASCII의 캐리지 리턴 문자(13)에 매핑된 Enter 키만 있습니다.이것이 기기에 의해 OS로 전송되는 실제 내용입니다.그러나 서로 다른 OS에서 Enter 키를 다르게 해석하기로 결정합니다.따라서 유닉스 계열 시스템에서 캐리지 리턴은 입력을 수신하는 프로그램에 전달하기 전에 라인 피드 문자(ASCII로 10)로 변환됩니다.그리고 Windows에서 CR은 두 개의 문자로 번역됩니다. CR 뒤에 LF가 이어집니다.그러나 입력 스트림을 원시 모드로 설정할 수 있으며, 이 경우 프로그램은 키보드가 실제로 전송하는 것을 얻습니다.이제 편집자가 등장합니다.편집기가 원시 모드에서 stdin으로부터 CR을 받으면 CR이 키보드의 Enter 키(키보드에 대한 가정)에 해당하고 화면에 새 줄이 표시된다는 것을 알 수 있습니다.원시 모드에서는 CR + LF를 출력하기 위해 쓰기 시스템 호출을 호출해야 합니다.출력 스트림이 원시 모드가 아닌 경우 텍스트 편집기는 리눅스에서 LF와 같은 OS별 시퀀스를 출력해야 합니다.
마지막으로, 언어 런타임은 새로운 줄을 자신만의 방식으로 해석할 수도 있습니다.예를 들어, C 표준은 텍스트 모드로 파일을 쓸 때 '\n'은 시스템에서 사용하는 native newline sequence로 투명하게 번역되며, 한 문자보다 길 수 있습니다.텍스트 모드에서 읽을 때 native newline sequence는 다시 '\n'으로 번역됩니다.이진 모드에서는 번역이 수행되지 않으며 '\n'에서 생성된 내부 표현이 직접 출력됩니다.'\n'과 '\r'은 각각 LF와 CR을 나타내는 언어별 문자로 C와 같은 언어에서 인기가 있습니다.하지만 모든 언어가 이 표기법을 사용해야 하는 것은 아닙니다.
두 번째 질문의 경우, "\n"은 '\n' 다음에 '\0' 종결자가 나옵니다.콘솔에서 '\0'을 입력할 수 없습니다.
첫 25 하고 Enter를 합니다.getc
25자를 모두 입력하고 Enter를 누를 때까지 반환되지 않습니다.입력할 때 문자를 읽으려면 플랫폼별 코드가 필요합니다.로,다를 이 더 수 .fgets
문자열로 만들고 새 줄을 다듬은 다음 입력 줄을 전체적으로 처리합니다.
언급URL : https://stackoverflow.com/questions/10059142/reading-r-carriage-return-vs-n-newline-from-console-with-getc
'programing' 카테고리의 다른 글
스프링부츠 + 스웨거 + 커스텀 스웨거 -ui.html (0) | 2023.10.15 |
---|---|
javascript의 고유 (0) | 2023.10.15 |
구조물의 새 인스턴스(instance)를 만드는 방법 (0) | 2023.10.15 |
IIS 8에서 응용 프로그램 풀을 원격으로 중지/시작하는 방법 (0) | 2023.10.15 |
EF가 불필요한 null-check를 사용하여 SQL 쿼리를 생성하는 이유는 무엇입니까? (0) | 2023.10.15 |