Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Jessé P. de Melo

C Como passar parametros para função direto pelo scanf

Recommended Posts

Fiz o exercício:

Faça uma função que receba 3 números inteiros como paramentos, representando horas, minutos e segundos, e os converta em segundos. 

Código:

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

void main(void){
    unsigned h,m,s;
    int conversor_hrs(int hrs, int minutos, int segundos);
    printf("Digite as horas: (HH-MM-SS) ");
    scanf("%u-%u-%u",&h,&m,&s);
    printf("O valor em segundos %i: ",conversor_hrs(h,m,s));

}
int conversor_hrs(int hrs, int minutos, int segundos){
    int total_segundos=0;
    total_segundos=(hrs*60*60)+(minutos*60)+segundos;
    return(total_segundos);
}

Minha duvida é tem como passar os parâmetros da função direto na chamada sem popular variáveis intermediarias?

exemplo:

conversor_hrs(scanf("%i"),scanf("%i"),scanf("%i"));

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com scanf? Não!:tw_astonished:

adicionado 1 minuto depois

Pelo menos, não da maneira direta como vemos aqui

3 minutos atrás, Jessé P. de Melo disse:

conversor_hrs(scanf("%i"),scanf("%i"),scanf("%i"));

 

adicionado 4 minutos depois
int pegar_int(void){
	int scn = 0;

	scanf("%i", &scn);
	return scn;
	}
...
conversor_hrs(pegar_int(),pegar_int(),pegar_int());

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 horas atrás, Jessé P. de Melo disse:

e usando outros artifícios?

Melhor maneira que conheço é aquela que indiquei acima.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Postado (editado)

A forma mais simples e menos trabalhosa é do @AnsiC, porém se você estiver afim de se divertir(quebrar a cabeça), você pode criar sua própria função de scanf.

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

int my_scanf()
{
    int tam = sizeof(char) + 1; // Tamanho inicial, + 1 por conta do caractere nulo que indica o final de uma string('\0')
    int qntNumDigitados = 0;
    char* numeros_digitados = (char*)malloc(tam); // vetor onde vai salvar os números digitados pelo usuário

    while (true)
    {
        char currentResult = getchar();

        // Se o usuario apertar enter termina o loop
        if (currentResult == '\n')
        {
            numeros_digitados[qntNumDigitados] = '\0'; // Termina a string
            break;
        }

        // Verifica se é um número que foi digitado atraves do valor retornado pela getchar
        // Segundo a tabela ASCII(http://www.ricardoarrigoni.com.br/tabela-ascii-completa/):
        // 48 = número 0
        // 49 = número 1
        // ...
        // ...
        // 57 = número 9
        if (currentResult < 48 || currentResult > 57) // Valor digitado pelo usuario não é um número
            continue;

        // Salva o caractere digitado no vetor
        numeros_digitados[qntNumDigitados] = currentResult;

        tam += sizeof(char);

        // Realoca um novo vetor com mais memória para o proximo número digitado
        numeros_digitados = (char*)realloc(numeros_digitados, tam);

        qntNumDigitados++;
    }

    // Transforma a string para um inteiro
    int numero_digitado = atoi(numeros_digitados);

    // Libera a memória que foi alocada para o vetor onde está armazenado os números
    free(numeros_digitados);

    return numero_digitado;
}

int conversor_hrs(int hrs, int minutos, int segundos) {
    int total_segundos = 0;
    total_segundos = (hrs * 60 * 60) + (minutos * 60) + segundos;
    return(total_segundos);
}

int main()
{
    conversor_hrs(my_scanf(), my_scanf(), my_scanf());

    system("pause");

    return 0;
}

 

Editado por cyer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×