Ir ao conteúdo

Posts recomendados

Postado

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"));

 

Postado

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
Postado

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

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...