这是我的版本detab的,从这个K&R锻炼:

  

修改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时,下一个标签停止假设开始活跃?在这一点应该程序开始使用TAB_STOP 8,而不是开始5?换行后或者我应该怎么做呢?

我也真的不知道我是否应该把所有这一切到主,或者我应该坚持一个单独的函数?

编辑:确定这就是我试图

#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;
}

我在正确的轨道上?可以这样工作?我还没有仍然改性detab。

有帮助吗?

解决方案

我解释接受tab 5 8 10为表示有标签停止在5 8 ,和10 列(在此之后,每8列,或者你使用任何为默认值。这是值得商榷的第10列之后的下一个制表位是否应在第18栏(8位版本)或16(默认的下一个倍数8)。

其他提示

标签的列表停止指定特定列,挡块之间不距离。也就是说,如果所述列表是5,8,10然后在位置的标签1-4应该将光标放置在如图5所示,在位置5-7应该将光标置于8,和8-9将光标放置在10后每个换行符参数列表应该从第一片重新开始再次停止。在最后一个定义的制表位后面的线的行为是你的,你通常会回到一些默认的选项卡停止间隔。

您有一定的回旋余地在这里,因为你在设计它;然而,最流行的方法是继续与上次供给的宽度之后的默认宽度。

例如,如果[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