2014-11-01 1 views
2

이 프로그램에서 무엇을해야합니까? 나는 이해할 수 없다.
질문은 다음과 같습니다. 입력란의 탭을 적절한 탭 번호 인 공백으로 대체하여 다음 탭 정지 지점으로 바꿀 수있는 프로그램 detab을 작성하십시오. 고정 된 탭 정지 세트, 즉 모든 n 개의 열을 가정하십시오. 변수 또는 기호 매개 변수 여야합니까?
탭 ('\ t')을 공백 ('')으로 바꾸기 시작했습니다. 하지만 이것은 잘못된 접근이라고 생각합니다. 제안 하시겠습니까?
및 btw n은 어떻게해야합니까? 변수 또는 기호 매개 변수? 지금까지K & R 연습 1-20 The Programming Language 2nd Edition

코드 : 내가 의미를 이해할 수 없었다이 연습을 위해 게시 된 모든 질문에

#include<stdio.h> 
#define TAB 5 
int main() { 
    int i, c; 
    while((c = getchar()) != EOF) { 
     if(c == '\t') { 
      for(i = 0; i < TAB; ++i) 
       putchar(' '); 
     } else 
      putchar(c); 
    } 
    return 0; 
} 

.


이 내 마지막 코드, 그것은 어떤 문제/버그가 있다면 말씀 해주십시오. 나는 그것이 작동해야한다고 생각합니다.
@ Nit, @ Chrono Kitsune, @ dasblinkenlight 및 기타 도움을 주신 모든 분들께 감사드립니다. 오히려 각 탭에 대한 공간의 고정 된 수를 삽입하는 것보다, 당신이 인쇄 된 양에 따라 공간의 다른 번호를 삽입해야합니다

#include<stdio.h> 
#define TAB 8 
int main() { 
int c, count = 0, space = 0; 
while((c = getchar()) != EOF) { 

    if(c == '\t') { 
     space = (TAB - (count % TAB)); 
     while(space > 0){ 
      putchar(' '); 
      count++; 
      space--; 
     } 
    } 
    else{ 
     putchar(c); 
     ++count; 
    } 

    if(c == '\n') 
     count = 0; 
} 
return 0; 
} 
+0

+1 K & R 학습. – Nit

+0

하지만 문제가 무엇입니까? 이 접근법에 대해 잘못된 점은 무엇입니까? – ChiefTwoPencils

+1

힌트 : 문자 수를 센다. –

답변

3

은 당신이하고있는 것은 운동이 당신이 원하는 것이 아니다 지금까지 선.

탭 당 공백 수를 어떻게 사용하든 문제가되지 않습니다. 전처리 상수를 사용하는 방식은 완벽합니다. 그러나 '\t'이 어디에 있는지에 관계없이 TAB 공백을 생성하는 대신 "일반"문자가 얼마나 많이 인쇄되었는지 계산하고 '\t'을 볼 때 필요한 공백 수를 계산해야합니다.

지금까지 인쇄 된 문자에 대해 변수 count을 만듭니다. 0으로 초기화 한 다음 '\n' 문자가 나타날 때마다 다시 0으로 재설정하십시오. putchar으로 전화 할 때는 count++으로 지정하십시오.

이제 '\t' 탭이 표시되면 다음 탭 정지 위치까지의 거리를 계산하십시오. 그 표현은

TAB - (count % TAB) 

입니다. 이는 인쇄 할 공간의 양입니다.

이 정보는 다시 돌아가서 프로그램을 수정하는 데 충분한 정보 여야합니다.이 작업을 완료하려면 추가로 5 줄의 코드를 추가해야합니다 (삽입해야 할 중괄호의 줄은 계산하지 않아야 함). 운동.

+0

정확히 탭 중지 무엇입니까? – Abhishek

+1

또 다시, 몇 초 인터넷 검색은 탭 중지가 무엇인지 알려줍니다. –

+2

@Abhishek 이것은 초기 컴퓨터 및 타자기에서 TAB 키가 사용했던 방식과 관련이 있습니다. Tab 키를 누르면 타이핑 위치 또는 커서가이 연습에서와 같이 같은 간격으로 또는 특정 지점에서 설정할 수있는 다음 소위 탭 정지 위치로 이동했습니다. 탭 간격이 5 칸의 등 간격으로 설정되었다고 가정 해 봅시다. Tab 키를 누르면 커서는 5로 나눌 수있는 다음 위치로 이동해야합니다. 0 위치에 있으면 5 위치로 이동합니다. 7 위치에 있으면 10 위치로 이동합니다. – dasblinkenlight