Você está aqui: C ::: Fundamentos da Linguagem ::: Métodos, Procedimentos e Funções |
Como escrever uma função C que aceita um número variável de argumentosQuantidade de visualizações: 8420 vezes |
Em algumas situações, pode ser necessário escrever uma função C que aceita um número variável de argumentos. Uma função deste tipo é printf(). Como você sabe, a função printf() nos permite fornecer uma string com marcadores de formatação e um número ilimitado de nomes de variáveis ou valores, que serão avaliados e inseridos em sua devida posição na string resultante. Na linguagem C, uma função que aceita um número variável de argumentos pode ser criada por meio do uso do tipo va_list e três funções: va_start(), va_arg() e va_end(). Tanto o tipo quanto as funções estão disponíveis no header <stdarg.h>. O tipo va_list (na verdade um parâmetro para as macros definidas em cstdarg) é usado para guardar informações sobre os argumentos da função. A função va_start() fica encarregada de inicializar um objeto do tipo va_list, de forma que as chamadas à va_arg() possam retornar os argumentos adicionais fornecidos à função que desejamos escrever. A função va_end(), por sua vez, se encarrega de limpar o objeto va_list e quaisquer outras porções de memória usadas no processo. Veja um trecho de código no qual temos uma função soma() que recebe quantos argumentos forem necessários (observe que o parâmetro obrigatório é a quantidade de argumentos que serão fornecidos): ---------------------------------------------------------------------- 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 <stdarg.h> // função que recebe um número variável de argumentos int somar(int n_args, ...){ int i, soma = 0; va_list ap; // declara o objeto va_list va_start(ap, n_args); // inicializa va_list // percorre os valores no va_list for(i = 1; i <= n_args; i++){ soma = soma + va_arg(ap, int); } // limpa o objeto va_list va_end(ap); return soma; } int main(int argc, char *argv[]){ // o valor exibido será 15 // o valor 4 é usado para informar a quantidade de // argumentos sendo fornecidos printf("Soma: %d\n\n", somar(4, 5, 3, 2, 5)); system("PAUSE"); return 0; } |
Link para compartilhar na Internet ou com seus amigos: |
C ::: Dicas & Truques ::: Recursão (Recursividade) |
Como escrever uma função recursiva para calcular a potência de um número usando a linguagem CQuantidade de visualizações: 47935 vezes |
Chamamos de potenciação a operação de se elevar um número (uma base) a um determinado expoente e obter sua potência. Veja a figura a seguir: Veja que aqui o valor 5 foi elevado ao cubo, ou seja, ao expoente 3 e obtemos como resultado sua potência: 125. O código abaixo mostra como você pode escrever uma função recursiva em C que permite calcular a potência de um número inteiro: ---------------------------------------------------------------------- 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 que calcula a potência de // um inteiro int potencia(int base, int expoente) { if(expoente == 0){ return 1; } else{ return base * potencia(base, expoente - 1); } } int main(int argc, char *argv[]) { int base = 3; int expoente = 4; printf("%d elevado a %d = %d", base, expoente, potencia(base, expoente)); printf("\n\n"); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: 3 elevado a 4 = 81 |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como concatenar apenas parte de uma string à outra string usando a função strncat() da linguagem CQuantidade de visualizações: 9820 vezes |
Muitas vezes precisamos adicionar à uma string apenas alguns caracteres de outra, ou seja, não queremos concatenar as duas strings completamente; apenas parte da segunda. Para isso podemos usar a função strncat(). Veja o protótipo e explicação desta função:char *strncat(char *str1, const char *str2, size_t n); Aqui a quantidade n de caracteres da string str2 será anexada ao final da string str1. O caractere de fim de string (null character) da str1 é sobrescrito durante a operação e anexado novamente assim que os caracteres desejados da str2 sejam copiados. Veja um 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 <string.h> int main(int argc, char *argv[]) { char texto[] = "Gosto muito de "; char palavra[] = "C++"; /* Na segunda sequencia de caracteres nós temos "C++", mas queremos anexar à primeira sequencia apenas "C". Veja como isso é feito */ strncat(texto, palavra, 1); // exibe o resultado puts(texto); system("pause"); return 0; } Ao executar este códigos nós teremos o seguinte resultado: Gosto muito de C |
C ::: Dicas & Truques ::: Data e Hora |
Como usar o tipo time_t do header <time.h> da linguagem CQuantidade de visualizações: 5057 vezes |
O tipo time_t, presente no header <time.h> é usado quando precisamos representar datas e horas e, quando necessário, efetuar operações aritméticas envolvendo as mesmas. Este tipo é obtido por meio de uma chamada à função time(). Veja:---------------------------------------------------------------------- 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 <time.h> int main(int argc, char *argv[]){ // declara uma variável do tipo time_t e atribui a ela // o resultado de uma chamada à função time() time_t hora_atual = time(NULL); printf("Segundos desde 01/01/1970: %d\n\n", hora_atual); system("PAUSE"); return 0; } Ao executar este trecho de código teremos algo parecido com: Segundos desde 01/01/1970: 1334017044 Como podemos ver, o tipo time_t é apenas um apelido para um long, como declarado no header time.h: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- typedef long time_t; Desta forma, time_t guarda a quantidade de segundos decorridos desde a meia-noite do dia 01/01/1970 UTC. |
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
Java - Como usar a classe Character da linguagem Java para tratar caracteres individuais em seus programas |
Códigos Fonte |
Software de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento 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 |
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades 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 |