Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Dúvida! Contagem de Comentários "//" e &quot


FabioArgenton

Pergunta

Pessoal ainda sou novato na área de desenvolvimento (2º Semestre), estou com um problema aqui que esta me deixando meio doido, descrição do problema:

Criar um programa em C que abra um arquivo .txt contendo um cód em c++ e mostre o número de linhas do código que são comentários formatados segundo a sintaxe da Linguagem C/C++. A sintaxe prevê dois tipos de comentários: linha única começando com os caracteres “//” (barra, barra); e comentários multi-linhas começando com “/*” (barra, asterisco) e com término determinado por “*/” (asterisco, barra).

Cheguei a seguinte lógica:

=========================================

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main () 

{   
    FILE * pFile;
    int c; 
    int n = 0;
    pFile = fopen ("ArquivoTexto.txt", "r"); 
    
    if (pFile !=NULL)
    { 
      do 
        { 
          c = fgetc(pFile); 

    if (c =='/') n++; 
        }

    while (c != EOF);
          fclose(pFile);     
          printf("Numero de Comentarios = %d.\n", n);   
    }
    
system("PAUSE>>null");    
return 0;

// 1º Comentário
// 2º Comentário
// 3º Comentário
// 4º Comentário
/* 5º Comentário */
// 6º Comentário


}

=========================================

Esta compilando certo porém ele mostra o total de "/" que aparece no texto por exemplo se fosse ler esse código ai acima teria que mostrar 6 comentários porém esta mostrando 13 ou seja 13 "/", se eu fizer a qtd total de "/" encontradas dividido por 2 também não confere pois o programa lê todos as barras inclusive a do sinal de dividir.

Teria que ser feito uma maneira de que cada vez que o caracter "/" aparecer seguido de outra "/" ou seja "//" incremente o contador mas não consigo achar uma maneira de resolver isso.

Gostaria de alguma dica, estou a 2 semanas tentando resolver e nada, por favor me ajudem pelo menos a contar os comentários simples "//" ai depois tentarei através desse problema tentar contar também os comentários multi-linhas "/* */" .

Valeu pessoal....

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

size_t fread( void *buffer, size_t size, size_t num, FILE *stream );

int fseek ( FILE * stream, long int offset, int origin );

Olá, Fabio!

Desculpa, hoje não tou pra didática... Acho que assim dá certo:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
  char c[2];
  int n = 0;
  FILE *pFile = fopen ("ArquivoTexto.txt", "r");
  short comentarioAbertoC = 0, comentarioAbertoCPP;
  
  if (pFile != NULL)
    {
      while (fread(c, sizeof(char), 2, pFile) == 2) {//printf("%c %c\n", c[0], c[1]);
        if (c[0] == '/')  {
      switch (c[1]) {
      case '/':
        if (comentarioAbertoC || comentarioAbertoCPP)  {
          ++n;
          comentarioAbertoCPP = 1;
        }
        break;
      case '*':
        if (comentarioAbertoC || comentarioAbertoCPP)  {
          ++n;
          comentarioAbertoC = 1;
        }
      }
    }
        else if (c[0] == '*') {
      switch (c[1]) {
      case '/':
        if (comentarioAbertoC != 0)
          comentarioAbertoC = 0;
        break;
      case '\n':
        if (comentarioAbertoCPP != 0)
          comentarioAbertoCPP = 0;
      }
    }

        fseek(pFile, -1, SEEK_CUR);
      }
      
      fclose(pFile);    
      printf("Numero de Comentarios = %d.\n", n);  
    }
  
  system("PAUSE>>null");    
  return 0;
  
  // 1º Comentário
  // 2º Comentário
  // 3º Comentário
  // 4º Comentário
  /* 5º Comentário */
  // 6º Comentário
  
  
}

Link para o comentário
Compartilhar em outros sites

  • 0

Cara excelente o que eu demorei quase 1 mês quebrando a cabeça você fez em alguns minutos parabéms...só uma pergunta você já é formado ? se não em que ano esta e qual curso?

PARABÉMS valeuuuuu um dia eu chego lá Obrigado.

Agora vou tentar entender como você fez e treinar aqui.

Editado por FabioArgenton
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...