Kernighan과 Ritchie의 The C Programming Language를 살펴보고 있으며 연습 중 하나에 문제가 있습니다. 나는 초판과 연습 1-8을 사용하고 있다고 생각합니다.
각 탭을 세 문자 시퀀스>, 백 스페이스,-(오른쪽 방향 화살표)로 인쇄하고 각 백 스페이스를 유사한 시퀀스 (왼쪽 방향 화살표)로 바꾸는 프로그램을 작성하십시오. 이렇게하면 탭과 백 스페이스가 표시됩니다. 내 코드는 다음과 같습니다.
#include<stdio.h>
int c;
main(){
while((c = getchar()) != EOF){
if(c == '\t'){
putchar('>');
putchar('\b');
putchar('-');
}
else if(c == '\b'){
putchar('<');
putchar('\b');
putchar('-');
}
else
putchar(c);
}
}
MinGW 컴파일러를 사용하고 있으며 코드를 실행하면 화살표가없는 대시가 많이 표시됩니다. 또한 <또는>도 전혀 표시되지 않습니다. 이 연습 문제에 대한 다른 사람들의 해결책을 찾아 보았지만 내가 찾은 것은이 책의 두 번째 버전이며 해당 연습 문제에서는 탭을 세는 것입니다. 마지막으로 세 개의 putchar ()로 코드를 실행하여 화살표가 효과가 없도록했습니다. 나는 다시 같은 대시를 얻습니다.
누구든지 이것에 대해 밝힐 수 있습니까?
너에게 듣기를 바래,
유 시프 누리 자데
기본적인 문제는 프로그램이 구식 시스템 용으로 작성되었다는 것입니다.
일반적인 입력 설정을 사용하여 일반적인 시스템에서 해당 프로그램을 실행하면 프로그램에 백 스페이스 문자가 표시되지 않습니다.
예를 들어, Unix 계열 시스템에서 표준 입력 ( stdin
)은 일반적으로 한 번에 한 줄씩 처리됩니다. 한 번에 문자를 읽는 프로그램은 내부 버퍼에서 읽습니다. 백 스페이스를 입력하면 백 스페이스 문자를 프로그램에 보내지 않습니다. 실제로 내부 버퍼에서 이전 문자를 제거합니다.
예를 들어 "abcx Backspacedef" 를 입력 하면 프로그램에 "abcdef"만 표시됩니다.
Unix와 유사한 시스템을 사용하는 경우 리터럴 백 스페이스 앞에 Ctrl-V. 그리고 Backspace키보드 의 키는에 매핑 될 수 있습니다 Delete. 그렇다면 Ctrl-VCtrl-H리터럴 백 스페이스 문자를 보내십시오.
(유닉스 계열 시스템이 아니라면 비슷한 작업을 수행 할 수있는 방법이있을 수 있지만 그게 뭔지 모르겠습니다.)
그러나 Michael Walz의 답변이 지적했듯이 프로그램이 사용하는 오버 스트라이크 (인쇄> 백 스페이스-오른쪽 화살표 인쇄)는 하드 카피 터미널에서만 작동합니다. 최신 디스플레이 터미널에서 백 스페이스는 단순히 이전 문자를 지 웁니다.
그리고 제가 코멘트에서 썼던 것을 되풀이합니다. 1978 년에 출판 된 Kernighan & Ritchie (K & R1)의 초판은 진정 고전이지만 C 언어의 오래된 사전 표준 버전을 설명합니다. 출판 이후 가장 큰 변화 는 인자의 유형을 지정하는 함수 선언 인 프로토 타입 의 추가 일 것입니다 . 그들은 1978 년에 존재하지 않았지만 현대 C 코드에서 프로토 타입을 사용하지 않는 것은 매우 나쁜 습관입니다. 두 번째 버전의 사본을 얻을 수 있다면 그렇게하십시오. Kindle과 Nook는 물론 죽은 나무에서도 사용할 수 있습니다. (1989 년에 출판 된 두 번째 판조차도 다소 구식이지만 여전히 C를 배울 수 있습니다. 좋은 C89 / C90 코드는 일반적으로 여전히 좋은 C99 및 C11 코드입니다.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다