Jump to content
thinkabout

Apagar comentários de um ficheiro delimitados por /* */

Recommended Posts

thinkabout

Boas pessoal, quero apagar comentários delimitados por /* */, o máximo que consigo é achar uma determinada letra e mudar essa letra.

Está com if mas devo ter que fazer algo com while contudo se meter '/*' mesmo com if ele já não gosta.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> /* Por causa da função exit */
/*
Desenvolva um programa que elimine os comentários de um programa em código C guardado
num ficheiro de texto. Considere que os comentários são delimitados pelas sequências /* … */.
O código que resulte da limpeza deve ser guardado num novo ficheiro (o ficheiro original não
deve ser alterado).
Os nomes dos ficheiros de entrada e de saída devem ser fornecidos através da linha de comando.
*/
main(int argc, char*argv[])
{
FILE *fin, *fout;
int caracter;  /* Inteiro para ler os caracteres */
/* Testar a Linha de Comando */
if (argc!=3)
{
printf("Sintaxe: \n\n%s Origem Destino\n\n",argv[0]);
exit(1); /*Termina o Programa*/
}
/* Abrir o Arquivo de origem */
fin = fopen(argv[1],"r");
if (fin==NULL)
{ printf("Impossível abrir o arquivo %s\n",argv[1]);
exit(2);
}
/* Abrir o Arquivo de destino */
if ((fout = fopen(argv[2], "w")) == NULL) // Forma mais compacta de escrever o mesmo.
{ printf("Impossível Criar o arquivo %s \n", argv[2]);
exit(3);
}
// Aqui  já consigo mudar a / pelo o a, mas o objetivo final seria apagar tudo que estaria entre /* */
while ((caracter=fgetc(fin)) !=EOF)
{
if (caracter == '/' )
{
fputc ('a',fout);
}
else
{
fputc (caracter,fout);
}
}
fclose(fin);
fclose(fout);
}

Edited by thinkabout

Share this post


Link to post
Share on other sites
HappyHippyHippo
- definir uma variável de estado como "não comentário"
- enquanto a leitura de um caracter do stream for correctamente efectuada
 - se o valor do estado for :
   - "não comentário" então
     - se o caracter for '/' então
       - passar o valor de estado para "barra de abertura de comentário"
     - caso contrário
       - tratar o caracter lido como um caracter que não faz parte do comentário
   - "barra de abertura de comentário" então
     - se o caracter for '*' então
       - passar o valor de estado para "comentário"
     - caso contrário
       - tratar o caracter '/' anteriormente lido como não fazendo parte do comentário 
       - tratar o caracter lido como um caracter que não faz parte do comentário
   - "comentário" então
     - se o caracter for '*' então
       - passar o valor de estado para "asterisco de fecho de comentário"
   - "asterisco de fecho de comentário" então
     - se o caracter for '/' então
       - passar o valor de estado para "não comentário"
     - caso contrário
       - se o caracter não for '*' então
         - passar o valor de estado para "comentário"


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Xpirito

É por estas coisas que dou tanto valor ao Pseudo-código. Não tenho centenas de horas de programação mas sei que se passarmos o nosso problema para pseudo-código, ficará sempre mais fácil resolver.


Para perguntas idiotas, respostas estúpidas!

Share this post


Link to post
Share on other sites
brunoais

Eu sou do outro lado do espetro.

Trabalhar com pesudo-código torna o problema mais difícil de resolver. Preciso de pensar no código 1º e, só depois, é que paço para pseudo-código.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.