Ir ao conteúdo
  • Cadastre-se
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

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;
}

 

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×