Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

thinkabout

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

Mensagens Recomendadas

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

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.