Question

Ceci est ma version de detab, de cet exercice K & R:

  

Modifier detab accepter une liste de tabulation comme arguments. Utilisez le paramètre onglet par défaut s'il n'y a pas d'arguments.

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

Ma question est de savoir s'il y a plus d'un argument par exemple 5, 8, 10 quand le prochain onglet arrêt supposé commencer à être actif? À quel point devrait programmer commencer à utiliser TAB_STOP 8 au lieu du départ 5? Après un saut de ligne ou comment dois-je faire?

Je suis aussi pas vraiment sûr si je devrais mettre tout cela en principal, ou devrais-je rester avec une fonction distincte?

Modifier. Ok ce que j'ai essayé

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

Je suis sur la bonne voie? Peut-il fonctionner? Je nai encore detab modifié.

Était-ce utile?

La solution

J'interprète TABSTOP 5 8 10 signifie il y a de tabulation au 5 e , 8 e et 10 e colonnes (et après cela, toutes les 8 colonnes, ou tout ce que vous utilisez comme valeur par défaut. Il est ouvert à la question de savoir si le prochain arrêt de tabulation après la colonne 10 devrait être à la colonne 18 (8 places plus tard) ou 16 (multiple de la valeur par défaut 8).

Autres conseils

Une liste de tabulation spécifie des colonnes particulières, non distances entre les arrêts. Autrement dit, si la liste est 5,8,10 alors un onglet dans des positions 1-4 devrait placer le curseur à 5, dans des positions 5-7 devrait placer le curseur à 8 et 8-9 placer le curseur à 10. Après chaque Newline la liste des arguments doit recommencer à partir du premier onglet arrêter. Le comportement sur une ligne après la dernière étape de tabulation défini est à vous, vous généralement revenir à un certain onglet par défaut d'intervalle d'arrêt.

Vous avez une certaine marge de manœuvre ici, comme vous le concevoir; Cependant, la méthode la plus populaire est de poursuivre la largeur par défaut après la dernière largeur fournie.

Par exemple, si [5, 8, 10] est fournie et la valeur par défaut est 8, il continuerait à [5, 8, 10, 18, 26, 34, ...] ou [5, 8, 10 , 16, 24, 32, ...], selon la préférence.

Notez que j'utilise ces chiffres comme tabulation , au lieu de largeurs . Donc, [5, 8] signifie que le premier arrêt est à 5 une largeur de cinq, et le second est à 8 avec une largeur 3 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top