Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Hiccup

De txt para array ...

Recommended Posts

Olá pessoal,

Estou fazendo uma atividade da faculdade em que tenho que ler um arquivo txt e dizer quantas listas estão comentadas, ou seja, contem // ou /* */.

Eu pensei em passar todos os caracteres do arquivo txt para um array, mas empaquei. Consigo abrir o arquivo, contar o número de caracteres e criar o array, o problema está na hora de passar os caracteres para o array. Gostaria de saber se alguém pode me dar uma ajudinha? :blush:

Aqui está o miolo do código ...

 

...
 
FILE *arq;
strcat(file, ".txt");
 
char ch, aux;
int n = 0, i = 0;
 
arq = fopen(file,"r");
 
if(arq == NULL){
 
printf("Erro, nao foi possivel abrir o arquivo\n");
 
}else {
 
//Aqui eu conto o número de caracteres
while((ch = fgetc(arq)) != EOF ){
//putchar(ch);
n++;
}
 
//Aqui eu deixei comentado porque não consigo fazer a leitura abaixo
//char vetor[n]; 
 
//Coloquei esse print apenas para ver o andamento da coisa
printf("\nValor de n: %d", n);
 
//Aqui eu tentei alocar caracter por caracter e não deu certo
while((ch = fgetc(arq)) != EOF ){
//aux = putchar(ch2);
//vetor[i] = aux;
i++;
}
 
//Nesse print eu esperava que fosse dar o valor de i igual de n, mas dá i como 0
printf("\nValor de i: %d", i);
 
}
 
fclose(arq);
 
...

 

Obrigado pela ajuda,

Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

@@Hiccup

 

Estava pensando no seu problema... mas se tiver por exemplo o // dentro de uma função ele irá contar como comentário certo?


Ex:

 

Lendo esse próprio arquivo sera considerado 5 comentários.

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

//funcao main
int main()
{
    int i, cont =0;
    char buf[100];
    FILE *arq;

    arq = fopen("ale.c", "r");
    if (arq == NULL)
    {
        printf("ERRO\n");
    }

    fgets(buf,100,arq);
    while (!feof(arq))
    {
        //aqui vai ser considerado um comentario
       if (strstr(buf,"//"))
       {
           cont++;
       }
        fgets(buf,100,arq);
    }

    //imprime
    printf("Numeros de comentarios: %d\n", cont);

    fclose(arq);

    //return 0
    return 0;
}

 

Talvez o problema seja maior...

 

Se você conseguir poste o resultado, fiquei curioso !

 

...

brHUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, @brHUE,

 

Vou tentar sua sugestão. Assim que eu conseguir fazer o código funcionar, posto aqui ... :yes:

 

Obrigado pela ajuda,

Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @brHUE,

 

A forma que você fez conta o número de comentário de um linha (//) certinho. Agora vou estudá-lo pois tenha partes dele que não sei o que é e ainda tenho que implementá-lo para contar comentários de linhas multiplas (/**/). Vou marcar esse post como resolvido, mas quando eu concluir o algoritmo volto para postá-lo aqui.

 

Muito obrigado pela ajuda.

 

Até mais,

Hiccup

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ @Hiccup

 

Modifiquei o código para os comentários:

 

Ex:

 

5 linhas comentadas.

 

/* 1

2

3 */

 

// codigo

 

/* windows */

 

Não fiz todos os testes...

 

Código:

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

int main()
{
    int cont =0 ,cont2=0, s=0,x,y,i,l;
    char buf[100];
    FILE *arq;

    arq = fopen("agenda.c", "r");
    if (arq == NULL)
    {
        printf("ERRO\n");
    }

    x = 0;
    i = 1;
    fgets(buf,100,arq);
    while (!feof(arq))
    {
       if (strstr(buf,"//"))
       {
           cont++;
       }
       if (strstr(buf,"/*"))
       {
           if (strstr(buf,"*/"))
            {
                cont2++;
            }
            else
            {
                x = 1;
                l = i;
            }
       }
       if (x == 1)
       {
           if (strstr(buf,"*/"))
           {
               y = (i-l)+1;
               s = s+y;

               x = 0;
           }
       }

       i++;
       fgets(buf,100,arq);
    }

    printf("Numeros de linhas comentadas: %d\n", cont+cont2+s);

    fclose(arq);

    return 0;
}

brHUE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

 

Preciso de ajuda para um programa que conte apenas as linhas preenchidas com qualquer tipo de caractere, desde que esteja digitado algo nelas, e que tenha de ignorar as linhas em branco na contagem - o total seria a soma das linhas preenchidas -. Agradeço desde já!

 

O programa a seguir está contando linhas, porém, nunca bate com o número de linhas quem contém algo escrito nelas:

 

/* Conta número de linhas de um arquivo

 

*/

#include <stdio.h>

int main (void)

{

int c;

int nlinhas = 0; /* contador do número de linhas */

FILE *fp;

/* abre arquivo para leitura */

fp = fopen("entrada.txt","rt");

if (fp==NULL) {

printf("Não foi possivel abrir arquivo.\n");

return 1;

}

/* lê caractere a caractere */

while ((c = fgetc(fp)) != EOF && !"//") {

if (c == '\n')

nlinhas++;

}

/* fecha arquivo */

fclose(fp);

/* exibe resultado na tela */

printf("Numero de linhas = %d\n", nlinhas);

return 0;

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde!

 

Preciso de ajuda para um programa que conte apenas as linhas preenchidas com qualquer tipo de caractere, desde que esteja digitado algo nelas, e que tenha de ignorar as linhas em branco na contagem - o total seria a soma das linhas preenchidas -. Agradeço desde já!

 

O programa a seguir está contando linhas, porém, nunca bate com o número de linhas quem contém algo escrito nelas:

 

/* Conta número de linhas de um arquivo

 

*/

#include <stdio.h>

int main (void)

{

int c;

brainiac, por favor crie um tópico separado para seu problema. Ele é diferente do problema originalmente abordado aqui. Outra coisa: use a tag code para postar código-fonte.

 

 

Sobre a questão dos comentários, escrevi o seguinte programa há algum tempo que talvez ajude na resolução deste problema:

https://gist.github.com/guipn/3460811

 

É um parser para comentários de C, feito em C.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.