ATPS PROGRAMAÇÃO ESTRUTURADA II
Por: Yago Fernandes Miranda • 30/11/2015 • Trabalho acadêmico • 2.617 Palavras (11 Páginas) • 355 Visualizações
#include
#include
#include
//protótipo da função
void comentario(char contador[], int coment, int vazia);
//iniciando o programa main
int main(int argc, char *argv[]){
//declarando as variaveis
int coment = 0, vazia = 0;
int i;
//testando o argc
if (argc == 2){
coment =0;
vazia=0;
}
else{
//varrendo o for na posição 0 ate que seja menor que o numero de argumentos
for(i=0; i
if (strcmp ("-c",argv[i]) == 0){
coment = 1;
}
if(strcmp("-s", argv[i]) == 0){
vazia = 1;
}
}
}
//chamando a função
comentario (argv[argc-1], coment, vazia);
//saindo do programa
printf("\n **** Programa contador de linhas *****\n");
printf ("\n Bye Bye! \n\n");
system ("pause");
return 0;
}
//função
void comentario (char contador[], int coment, int vazia){
//declarando um arquivo
FILE *pArquivo;
/*variaveis da função*/
int c = 0, nCod = 0, cont = 0;
int i;
int blocoComent = 0, numeComent = 0, linhaComent;
int linhaVazia = 0, contVazia = 0, numeVazia = 0;
int opvazia =0 , opcaocoment;
char texto[sizeof(pArquivo)*10000];
char opcao[5] = {" "};
/*abrindo o arquivo, só para leitura*/
pArquivo = fopen("contador.c", "r");
// testando se o arquivo abriu
if (pArquivo != NULL){
do{
//lendo os caracteres do arquivo aberto
int fgetc (FILE *pArquivo);
/*passando para a variavel c os caracteres do arquivo*/
c = fgetc (pArquivo);
//testando se o caracter do arquivo for igual a um pulo de linha ele contabiliza 1 na variavel nCod
if(c == '\n'){
nCod++;
}
//gravando o caracter de c dentro do variavel texto na posição de cont
texto[cont] = c;
//acrescentando 1 na variavel cont
cont++;
}
//quando c for diferente de EOF que significa End Of File(fim do arquivo) ele fecha o arquivo
while(c != EOF);
fclose (pArquivo);
}
//se o arquivo nao abrir ele verifica se o contador e igual a -h e diz que é imposivel abrir o arquivo
else
if(strcmp("-h", contador)!= 0){
printf ("\n Imposivel abrir o arquivo!\n");
exit(1);
}
//varrendo o for de 0 ate a posição de cont-1 que é a ultima posição que ficou armazenada na variavel cont
for (i=0; i
//testando se o caracter da posição atual é igual a / e se a proxima posição é igual a um *
if(texto[i] == '/' && texto[i+1] == '*'){
//se for igual, bloco de comentario fica igual a 1 e numero de comentario acrescenta 1
blocoComent = 1;
numeComent++;
}
//testando se o bloco de comentario é igual a 1 e se a proxima posição atual é igual a um pulo de linha
if (blocoComent == 1 && texto[i] == '\n'){
//se for igual, o numero de comentario acrescenta 1
numeComent++;
}
//testando se o caracter da posição atual é igual a um * e se a proxima posição é igual a uma /
if (texto[i] == '*' && texto [i+1] == '/'){
// se for igual, bloco de comentario é igual a 0
blocoComent = 0;
}
//testando se o caracter da posição atual é igual a uma / e se a proxima posição é igual a outra /
if (texto[i] == '/' && texto[i+1] == '/'){
//se for igual nomero de comentario acrescenta 1
numeComent++;
}
//se nao for igual linha comentario fica igual a 0
else{
linhaComent = 0;
}
//testando se o caracter da posição atual é igual a um pulo de linha
if (texto [i] == '\n'){
/*se for igual linha de comentario se iguala a 1*/
linhaComent = 1;
}
/*testando se a linha vazia é igual a 1 e o contador de vazia é igual a 1 e o texto na posição atual é igual a um pulo de linha */
if(linhaVazia == 1 && contVazia == 1 && texto[i] == '\n'){
//se for igual, numero vazia acrescenta 1 e linha vazia se iguala a 0
numeVazia++;
linhaVazia = 0;
}
/*testando se a linha vazia é igual a 1 e o caracter na posição atual do texto é diferente de um espaço e diferente de um pulo de linha*/
if (linhaVazia == 1 && texto[i] != ' ' && texto [i] != '\n' ){
//contador de vazia se iguala a 0
contVazia = 0;
}
/*tentando se o caracter na posição do texto é igual a um pulo de linha*/
if (texto[i] == '\n'){
//se for igual linha vazia e contador de linha se igualam a 1
...