Hiccup 0 Denunciar post Postado Março 27, 2014 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
brhue 7 Denunciar post Postado Março 27, 2014 @@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
Hiccup 0 Denunciar post Postado Março 27, 2014 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
Hiccup 0 Denunciar post Postado Março 27, 2014 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
brhue 7 Denunciar post Postado Março 27, 2014 @ @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
brainiac_infante 0 Denunciar post Postado Junho 1, 2014 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
guidjos 65 Denunciar post Postado Junho 1, 2014 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
brainiac_infante 0 Denunciar post Postado Junho 2, 2014 grato pela orientação. Compartilhar este post Link para o post Compartilhar em outros sites