Você está aqui: C ::: Dicas & Truques ::: Arquivos e Diretórios |
Como listar os arquivos e sub-diretórios em um diretório em C usando uma função recursivaQuantidade de visualizações: 473 vezes |
Nesta dica mostrarei como podemos listar todos os arquivos em um diretório usando a linguagem C. No entanto, se algum destes arquivos for um diretório, nós vamos entrar nesse diretório e listar o seu conteúdo também. Para isso nós vamos usar uma função recursiva chamada listar_arquivos_recursiva(). Veja o código completo para o exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <locale.h> #include <dirent.h> // protótipo da função recursiva que lista todos os arquivos // em um diretório void listar_arquivos_recursiva(const char *caminho_base); // função principal do programa int main(int argc, char *argv[]){ // caminho e nome do diretório char caminho_diretorio[100]; setlocale(LC_ALL,""); // para acentos do português // vamos pedir para o usuário informar o caminho e // nome do diretório printf("Informe o caminho do diretório: "); scanf("%s", caminho_diretorio); // agora chamamos a função recursiva que lista todos os // arquivos e diretórios dentro do diretório especificado listar_arquivos_recursiva(caminho_diretorio); printf("\n\n"); system("PAUSE"); return 0; } // função que lista todos os arquivos em um diretório void listar_arquivos_recursiva(const char *caminho_base){ // criamos uma estrutura do tipo dirent, // definida no header dirent.h struct dirent *entrada; // abrimos o diretório especificado DIR *diretorio = opendir(caminho_base); // para registrar os novos caminhos char caminho[1000]; // é um diretório válido? if(!diretorio){ return; } else{ // vamos abrir o diretório while ((entrada = readdir(diretorio)) != NULL){ if (strcmp(entrada->d_name, ".") != 0 && strcmp(entrada->d_name, "..") != 0){ printf("%s\n", entrada->d_name); // vamos construir o caminho para listar o sub-diretório strcpy(caminho, caminho_base); strcat(caminho, "/"); strcat(caminho, entrada->d_name); // chama a função recursiva novamente listar_arquivos_recursiva(caminho); } } // e fechamos o diretório closedir(diretorio); } } Ao executar este código C nós teremos o seguinte resultado: Informe o caminho do diretório: C:\estudos_csharp exemplo_pedido_vetores ExemploPedidoVetores .vs ExemploPedidoVetores v16 .suo bin Debug netcoreapp3.1 ExemploPedidoVetores.deps.json ExemploPedidoVetores.dll ExemploPedidoVetores.exe ExemploPedidoVetores.pdb ExemploPedidoVetores.runtimeconfig.dev.json ExemploPedidoVetores.runtimeconfig.json ExemploPedidoVetores ExemploPedidoVetores.csproj ExemploPedidoVetores.sln obj Debug |
![]() |
C ::: Dicas & Truques ::: Recursão (Recursividade) |
Como somar os elementos de um vetor em C usando uma função recursiva - Linguagem C para iniciantesQuantidade de visualizações: 5307 vezes |
Em algumas ocasiões ficamos imaginando o que pode ser feito com os métodos e funções recursivas. A resposta é: praticamente tudo. Veja abaixo um programa C completo no qual eu mostro como escrever uma função recursiva que recebe um array e mostra a soma de seus elementos (lembre-se de que um array é o mesmo que vetor, ou seja, uma matriz de uma linha e várias colunas): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> // função recursiva para somar todos os elementos de um array int somar(int indice, int tamanho, int vetor[]){ // o caso base...hora de encerrar a recursividade if(indice == (tamanho - 1)){ return vetor[indice]; } else{ // ainda não é o caso base? vamos fazer uma nova chamada à função somar() return vetor[indice] + somar(indice + 1, 10, vetor); } } // função principal do programa int main(int argc, char *argv[]){ // vamos declarar um array de 10 elementos int valores[10]; int i, soma; // vamos pedir ao usuário para informar os valores para o vetor for(i = 0; i < 10; i++){ printf("Informe o valor do elemento %d: ", i); scanf("%d", &valores[i]); } // vamos efetuar uma chamada à função recursiva somar(); // nota que estamos passando o índice inicial, o tamanho do // array e o array em si soma = somar(0, 10, valores); printf("\nA soma dos elementos è: %d", soma); printf("\n\n"); system("PAUSE"); return 0; } Ao executarmos este código C nós teremos o seguinte resultado: Informe o valor do elemento 0: 7 Informe o valor do elemento 1: 3 Informe o valor do elemento 2: 1 Informe o valor do elemento 3: 3 Informe o valor do elemento 4: 8 Informe o valor do elemento 5: 9 Informe o valor do elemento 6: 4 Informe o valor do elemento 7: 3 Informe o valor do elemento 8: 2 Informe o valor do elemento 9: 6 A soma dos elementos é: 46 |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Controle |
Exercício Resolvido de C - Como testar se um ano é bissexto em C - Um programa que lê um ano com quatro dígitos e informa se ele é bissexto ou nãoQuantidade de visualizações: 887 vezes |
Pergunta/Tarefa: Chama-se ano bissexto o ano ao qual é acrescentado um dia extra, ficando ele com 366 dias, um dia a mais do que os anos normais de 365 dias, ocorrendo a cada quatro anos (exceto anos múltiplos de 100 que não são múltiplos de 400). Isto é feito com o objetivo de manter o calendário anual ajustado com a translação da Terra e com os eventos sazonais relacionados às estações do ano. O último ano bissexto foi 2012 e o próximo será 2016. Um ano é bissexto se ele for divisível por 4 mas não por 100, ou se for divisível por 400. Escreva um programa C que pede ao usuário um ano com quatro dígitos e informa se ele é bissexto ou não. Sua saída deverá ser parecida com: Informe o ano: 2024 O ano informado é bissexto. Veja a resolução comentada deste exercício usando C console: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <locale.h> int main(int argc, char *argv[]){ int ano; setlocale(LC_ALL,""); // para acentos do português // vamos solicitar que o usuário informe um ano printf("Informe o ano: "); scanf("%d", &ano); // vamos verificar se o ano informado é bissexto if(((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0)){ printf("\nO ano informado é bissexto.\n"); } else{ printf("\nO ano informado não é bissexto.\n"); } printf("\n\n"); system("pause"); return 0; } |
C ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como passar um vetor para uma função CQuantidade de visualizações: 12074 vezes |
Muitas vezes precisamos passar um vetor, ou seja, um array unidimensional para uma função na linguagem C. O trecho de código abaixo mostra como isso é feito. Observe que a passagem de um vetor para uma função é feita por referência, ou seja, qualquer alteração nos valores do array dentro da função será refletida no vetor original: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> #include <locale.h> // protótipo da função que recebe o array e exibe os seus elementos void exibir_vetor(int vetor[], int tamanho); // função principal do programa int main(int argc, char *argv[]){ // cria um vetor com 5 inteiros int valores[] = {54, 3, 89, 6, 1}; setlocale(LC_ALL,""); // para acentos do português // passa o vetor para a função exibir_vetor() // veja que temos que enviar também a quantidade // de elementos exibir_vetor(valores, 5); printf("\n\n"); system("PAUSE"); return 0; } // função que recebe o array e exibe os seus elementos void exibir_vetor(int vetor[], int tamanho){ int i; printf("Os elementos do vetor são:\n\n"); for(i = 0; i < tamanho; i++){ printf("%d ", vetor[i]); } } Ao executar este código C nós teremos o seguinte resultado: Os elementos do vetor são: 54 3 89 6 1 |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Android Java - Como usar a classe Toast em suas aplicações Android |
Códigos Fonte |
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |