A l'origine, cette fonction était intégrée dans la fonction principale, créant une fonction principale très encombrée. Le programme remplace les onglets par le nombre d'espaces. Je suis toujours confus quant à ce qui se passe dans les listes d'arguments pour mes fonctions et comment passer argc/argv de main dans ces fonctions. Est-ce que je l'ai fait bien?J'ai essayé de décomposer ma fonction, mais je ne suis pas sûr si je l'ai fait correctement
Il y a des variables définies en haut du fichier:
#define OUTFILE_NAME "detabbed"
#define TAB_STOP_SIZE 8
#define NUM_ARGS 2
#define FILE_ARG_IDX 1
Voici mon deuxième tentative il:
void open_file(FILE *inf, FILE *outf, char *in[]) /*I feel like the arguments aren't right
{ and this function is just opening
and reading files*/
inf = fopen(in[1], "r");
outf = fopen(OUTFILE_NAME, "w");
if (inf == NULL)
{
perror(in[1]);
exit(1);
}
else if (outf == NULL)
{
perror(OUTFILE_NAME);
exit(1);
}
fclose(inf);
fclose(outf);
}
void detab(FILE *infile, FILE *outfile, char *argument[]) /* Confused about argument list
{ and this function actually
char c; does the detabbing */
int character_count = 0, i, num_spaces;
open_file(infile, outfile, argument); /* I want to call the previous
function but again, confused
while (fscanf(infile, "%c", &c) != EOF) about the argument list */
{
if (c == '\t')
{
num_spaces = TAB_STOP_SIZE - (character_count % TAB_STOP_SIZE);
for (i = 0; i < num_spaces; i++)
{
fprintf(outfile, " ");
}
character_count += num_spaces;
}
else if (c == '\n')
{
fprintf(outfile, "\n");
character_count = 0;
}
else
{
fprintf(outfile, "%c", c);
character_count++;
}
}
}
int main(int argc, char *argv[])
{
if (argc < 1)
{
fprintf(stderr, "usage: prog file\n");
exit(1);
}
else if (argc < NUM_ARGS)
{
fprintf(stderr, "usage: %s file\n", argv[0]);
exit(1);
}
detab(argc, argv); /* I want to pass argc and argv to the detab function, but I'm
having trouble with the argument list */
return 0;
}
Ce que je besoin d'aide, est de trouver ce qui se passe dans la listes d'arguments des fonctions. Je pense que ce qui m'embrouille, c'est comment faire correspondre mes types d'arguments, de sorte que je puisse passer des variables d'une fonction à l'autre.
L'existence de la fonction est de réutiliser des extraits de code plus tard. Si votre fonction n'est invoquée qu'une seule fois, je pense que cela peut être une optimisation prématurée. –
@Summer_More_More_Tea [No.] (http://blog.regehr.org/archives/942) –
@ H2CO3 Merci, y jeter un coup d'œil. –