2013-11-22 1 views
1
#include <stdio.h> 
/* replacing tabs and backspaces with visible characters */ 
int main() 
{ 
    int c; 
    while ((c = getchar()) != EOF) { 
     if (c == '\t') 
      printf("\\t"); 
     else if (c == '\b') 
      printf("\\b"); 
     else if (c == '\\') 
      printf("\\\\"); 
     else 
      putchar(c); 
    } 

    return 0; 
    } 

이제 내 질문이 .. 출력에서 ​​"\ b"를 볼 수없는 이유는 무엇입니까? 나는이 코드를 우분투 터미널에 썼다. 출력에서 "\ b"문자를 가져 오는 다른 방법이 있습니까? 만약 내가 C 프로그래밍을 배우기 시작한 것처럼 간단한 단어로 설명하십시오.이 예제는 K & R 연습 1-10에서입니다.우분투 (K & R 예제)의 출력에서 ​​백 스페이스 문자 ( b)를 가져올 수 없습니다.

답변

4

실행 프로그램을 시작하고 Ctrl 키-H를 입력합니다.

backspace key (also: <---)에 의해 전송되는 키 코드는 대부분 쉘에 의해 먹게됩니다. 이것은 터미널 구성 방법에 따라 다릅니다. 자세한 내용은 여기를 읽어 http://www.tldp.org/HOWTO/Keyboard-and-Console-HOWTO-5.html 당신이 좋아하는 입력 제공하는 경우

+0

을 확인합니다. 즉, 입력 자체에서 백 스페이스 대신 Ctrl-h를 눌러야한다는 의미입니까? 동일한 프로그램이 Windows PC에서 제대로 작동합니까? –

+0

첫 번째 질문 : 예/아니오, 터미널 설정 방법에 따라 다름 (내 대답의 링크 참조); 두 번째 질문 : 그것을 테스트해라! ;-) (그렇지만 Cygwin에서 기본 터미널 설정을 사용합니다.) – alk

0

이것은 유효한 C 코드가 아닙니다. 그것은 다음과 같아야합니다

#include <stdio.h> 
/* replacing tabs and backspaces with visible characters */ 
int main() 
{ 
    int c; 
    while ((c = getchar()) != EOF) { 
     if (c == '\t') 
      printf("\\t"); 
     else if (c == '\b') 
      printf("\\b"); 
     else if (c == '\\') 
      printf("\\\\"); 
     else 
      putchar(c); 
    } // <-- note the closing curly brace 
    return 0; 
} 

당신은 포함 된 파일 \b (0x08)을 준비하고 프로그램의 입력으로 사용한다. 또 다른 방법은 Ctrl 키 누르하는 것 - H을 다음 (키 조합에 대한 감사 @alk)

+2

이 질문에 대답합니까? – alk

+0

예. 백 스페이스 문자를 포함하는 파일을 조작하여 입력으로 사용하면 '\ b'로 바뀝니다. 하지만 적어도 유효한 구문이 필요합니다. – hek2mgl

+0

중괄호 교정에 감사드립니다. 이제는 다시 –

2
Is there any other way to get the "\b" character in output ? 

: 그 때문에 프로그램에

다음은 abc 될 것

AB 백 스페이스 CD를 어떤 쉘을 프로그램에 전달되었습니다.

정확한 입력 에 보내야합니다.

printf $'ab\bcd' | /path/to/executable 

을 그리고 예상 출력, 즉 :

ab\bcd 
+0

안녕하세요.'abdACKSPACEcd' 결과가'acd'에 없습니까? –

0

내가 너무 늦게 조금 알고를 인쇄 할 것 : 말하여 호출합니다. 당신의 문제에 대한 당신의 대답은 '\ t'가 아닌 32 (ascii)와 c를 비교하는 것입니다.

#include <stdio.h> 
      /* replacing tabs and backspaces with visible characters */ 
main() 
{ 
    int c; 
    while ((c = getchar()) != EOF) { 
     if (c == '\t') 
      printf("\\t"); 
     else if (c == 32) 
      printf("\\b"); 
     else if (c == '\\') 
      printf("\\\\"); 
     else 
      putchar(c); 
    } 
}