문제

이것은이 K & R 운동의 Detab 버전입니다.

탭 정지 목록을 인수로 수락하도록 detab을 수정하십시오. 인수가없는 경우 기본 탭 설정을 사용하십시오.

#include <stdio.h>
#include <stdlib.h>
#define TAB_STOP 8

/* replaces tabs from input with the proper amount of blank spots */
int Detab()
{
     int c, x;
     int column;
     x = column = 0;

     while((c=getchar())!=EOF)
     {
        if(c == '\n') /* reseting counter if newline */
        {
            putchar(c);
            return 1;
        }
        else if(c!='\t')  /* column counts places to tab spot */
        { 
             putchar(c);
             column++; 

             if(column == TAB_STOP) 
             column = 0;
        }
        else /* tab */
        {
           for(x=0; x<TAB_STOP - column; x++)
           putchar('_');

           column = 0;
        } 
     }
     return 0;
}
int main(int argc, char *argv[])
{
     int valid;

     while((valid=Detab())!=0);

     printf("Press any key to continue.\n");
     getchar();
     return 0;
}

내 질문은 예 5, 8, 10에 대해 하나의 주장이있는 경우 다음 탭 정지는 언제 활성화되기 시작한다고 가정합니까? 어느 시점에서 시작 5 대신 tab_stop 8을 사용하여 프로그램을 시작해야합니까? Newline 후 또는 어떻게해야합니까?

또한이 모든 것을 메인에 넣어야하는지 확실하지 않습니까? 아니면 별도의 기능을 고수해야합니까?

편집 : 알았어 이것이 제가 시도한 것입니다.

#define MAX_ARGUMENTS 100
int main(int argc, char *argv[])
{
     int i, val = 0;
     int nums[MAX_ARGUMENTS];
     int x = 0;

     for(i = 1; i < argc; i++) {

           while(isdigit(*argv[i])) {
             val = val * 10 + *argv[i] - '0';
             *++argv[i];
           }

           nums[x++] = val;
           val = 0;

     }

     Detab(nums);       


     printf("Press any key to continue.\n");
     getchar();
     return 0;
}

내가 올바른 길을 가고 있습니까? 이것이 효과가 있습니까? 나는 여전히 수정 된 수정을하지 않았다.

도움이 되었습니까?

해결책

나는 Tabstop 5 8 10을 해석하여 5에 탭 정지가 있음을 의미합니다.th, 8th, 10th 열 (및 그 후 8 개의 열 또는 기본값으로 사용하는 모든 것을 사용하여 기본값으로 사용하는 것. 열 10 이후 다음 탭 중지가 열 18 열 (나중에 8 개의 공백) 또는 16 (다음의 배수 배수)에 있어야하는지 의문을 제기 할 수 있습니다. 기본 8).

다른 팁

탭 중지 목록은 정지 사이의 거리가 아닌 특정 열을 지정합니다. 즉, 목록이 5,8,10 인 경우 1-4 위치의 탭은 커서를 5에, 위치 5-7 위치에 커서를 8에 배치하고 8-9로 커서를 10에 배치해야합니다. 각 newline 인수 목록은 첫 번째 탭에서 다시 시작해야합니다. 마지막으로 정의 된 탭 정지 후 라인의 동작은 귀하에게 달려 있습니다. 일반적으로 일부 기본 탭 정지 간격으로 돌아갑니다.

당신은 그것을 설계 할 때 여기에 약간의 여유가 있습니다. 그러나 가장 인기있는 방법은 마지막으로 제공된 너비 후 기본 너비를 계속 유지하는 것입니다.

예를 들어, [5, 8, 10]이 제공되고 기본값이 8 인 경우 [5, 8, 10, 18, 26, 34, ...] 또는 [5, 8, 10, 16, 선호도에 따라 24, 32, ...].

이 숫자를 사용하고 있습니다 탭이 중지됩니다, 대신에 너비. [5, 8]는 첫 번째 정지가 폭 5로 5이고 두 번째 정지는 폭이 8입니다. 3.

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