Pregunta

Esta es mi versión de detab, a partir de este ejercicio K & R:

  

Modificar detab para aceptar una lista de tabulación como argumentos. Utilice el ajuste de pestaña por defecto si no hay argumentos.

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

Mi pregunta es si hay más de un argumento, por ejemplo, 5, 8, 10, cuando se la siguiente tabulación supone que debe empezar a ser activo? Momento en el que debe comenzar a usar programar TAB_STOP 8 en lugar de la puesta en 5? Después de una nueva línea o cómo debería hacerlo?

También estoy realmente seguro de si debería poner todo esto en principal, o debería seguir con una función separada?

Editar:. Bien esto es lo que he intentado

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

¿Estoy en el camino correcto? Puede este trabajo? Todavía havent detab modificado.

¿Fue útil?

Solución

Me interpreto TabStop 5 8 10 en el sentido de que hay tabulaciones en los extremos 5 º , 8 º y 10 º columnas (y después de eso, cada 8 columnas, o lo que sea que estés utilizando como predeterminado. está abierto a la pregunta de si la siguiente tabulación después de la columna 10 debe estar en la columna 18 (8 espacios más adelante) o 16 (el próximo múltiplo del valor predeterminado 8).

Otros consejos

Una lista de tabulación especifica columnas particulares, y no las distancias entre paradas. Es decir, si la lista está 5,8,10 entonces una pestaña en las posiciones 1-4 debe colocar el cursor en 5, en las posiciones 5-7 debe colocar el cursor en 8, y 8-9 lugar el cursor en 10. Después cada salto de línea de la lista de argumentos debe empezar de nuevo desde la primera pestaña parar otra vez. El comportamiento en una línea después de la última tabulación definido depende de usted, por lo general va a ir de nuevo a algún intervalo de tabulación predeterminado.

Usted tiene un margen de maniobra aquí, ya que está diseñarlo; Sin embargo, el método más popular es continuar con el ancho predeterminado después de la última ancho suministrado.

Por ejemplo, si [5, 8, 10] se suministra y el valor predeterminado es 8, sería continuar como [5, 8, 10, 18, 26, 34, ...] o [5, 8, 10 , 16, 24, 32, ...], dependiendo de la preferencia.

Tenga en cuenta que estoy usando estos números como tabulación , en lugar de anchos . Así [5, 8] significa que la primera parada es en 5 con un ancho de 5, y el segundo es a 8 con una anchura 3 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top