Ir ao conteúdo

Posts recomendados

Postado

Boa tarde, estou tendo um problema com um exercício, mas não estou conseguindo identificar o que está errado.

Faça uma função em C que receba três números e usando a função DOBRO da questão anterior imprima
o dobro de cada um dos números. Use no mínimo 2 funções.

#include <stdio.h>



int NUM(int n);
int DOBRO(int valor);



int main()
{
    int num;



    NUM(num);



    printf("\n");



    DOBRO(num);



    return 0;
}
int NUM(int n)
{
    int i;
    for(i = 1; i <= 3; i++)
    {
        printf("Informe um numero:\n");
        scanf("%d", &n);
    }
}
int DOBRO(int valor)
{
    int i, res;
    for(i = 1; i <= 3; i++)
    {
    res = 2 * valor;

     printf("O resultado eh = %d\n", res);
    }
    return res;
}

 

 

saída do programa:

image.png.a6470a697a54af18bff56f2a96ab97fc.png

Postado
12 minutos atrás, sthefanes245 disse:

Boa tarde, estou tendo um problema com um exercício, mas não estou conseguindo identificar o que está errado.

perceba que quando você faz

int NUM(int n);

Você só está passando o valor da variável para a função, para você recuperar o valor que está dentro da função você tem que usar um ponteiro.

exemplo

int NUM(int *n)
{
    int i;
    for(i = 1; i <= 3; i++)
    {
        printf("Informe um numero:\n");
        scanf("%d", n);
    }
}

Quando o ultimo valor for informado, ele vai estar na variável num na função principal.

Porque a função está usando o endereço da variável num.

 

seu algoritmo usando ponteiros.

 #include <stdio.h>

int NUM(int *n);
int DOBRO(int *valor);

int main(void)
{
    int num;

    NUM(&num);

    printf("\n");

    DOBRO(&num);

    return 0;
}

int NUM(int *n)
{
    int i;
    for(i = 1; i <= 3; i++)
    {
        printf("Informe um numero:\n");
        scanf("%d%*c", n);
    }
}

int DOBRO(int *valor)
{
    int i, res;
    for(i = 1; i <= 3; i++)
    {
        res = 2 * (*valor);
        printf("O resultado eh = %d\n", res);
    }
    return res;
} 

 

Postado

 

você pode escrever "é" em vez de "eh", apenas coloque esses:

#include <locale.h> // coloque isso em baixo do stdio.h

setlocale(LC_ALL, "Portuguese_Brazil"); // coloque isso dentro da função main.

 

o mais recomendado é usar vetores como disse o @kgin

outra forma é colocar a função num dentro da função dobro e invocar somente a função dobro em um printf.. Mas repetindo, isso não é recomendado.

 

 

Postado
22 minutos atrás, Swalls disse:

você pode escrever "é" em vez de "eh", apenas coloque esses:

#include <locale.h> // coloque isso em baixo do stdio.h

setlocale(LC_ALL, "Portuguese_Brazil"); // coloque isso dentro da função main.

 

Não funciona assim magicamente, principalmente se estiver usando o windows e um editor de texto de respeito.

 

Para funcionar no windows tem que mudar a codificação para windows-1252, em qualquer sistema unix-like e só salvar o arquivo como utf-8 e nem precisa colocar o setlocale, porque a maioria dos terminais já funcionam nessa codificação.

  • Amei 1
Postado
1 hora atrás, sthefanes245 disse:

Faça uma função em C que receba três números e usando a função DOBRO da questão anterior imprima
o dobro de cada um dos números. Use no mínimo 2 funções

 

😄 Acho que se o enunciado acaba de listar duas funções não precisava explicitar que deve usar no mínimo duas funções certo? Mas não é um curso de lógica imagino.

 

Sua função NUM()

 

int NUM(int n)
{
    int i;
    for(i = 1; i <= 3; i++)
    {
        printf("Informe um numero:\n");
        scanf("%d", &n);
    }
}

 

Trata um único número, o n. Imagino que tenha lido o enunciado onde diz "uma função em C que receba três números" e sua função recebe só 1. Que tal tentar 

 

    int num ( int numero1, int numero2, int numero3);

 

Sua função não retorna nada então vai sumir o número lido...

 

Como está aprendendo se acostume a mostrar na tela o que acabou de ler porque muitas vezes as coisas não são o que parecem ser.

 

E TESTE o retorno de scanf() sempre. Leia o manual. É ingênuo seguir sem testar para seu programa cancelar linhas depois. Programas de estudo nem precisam tratar os erros, mas passar por cima é, como eu disse, ingênuo.

 

Pode chamar DOBRO de dentro dessa num() e assim nem precisa retornar algo.

 

Se vai ler os valores dentro da função de que servem os argumentos, como o n no caso, se vai ler logo em seguida o valor?

 

Há uma certa ambiguidade no enunciado. Se poderia imaginar que ler esses números da entrada é "receber" e assim não precisaria de argumento nenhum.

 

 

1 hora atrás, kgin disse:

perceba que quando você faz

int NUM(int n);

Você só está passando o valor da variável para a função, para você recuperar o valor que está dentro da função você tem que usar um ponteiro.

 

@kgin O valor pode ser recuperado através do óbvio valor de retorno. Pode simplesmente usar
 

int NUM()
{
    int n;
    for(int i = 1; i <= 3; i++)
    {
        printf("Informe um numero:\n");
        scanf("%d", &n);
    }
    return DOBRO(n);                                   
}

 

Claro que o enunciado pede algo diferente...

 

 

De volta ao seu programa
 

int main()
{
    int num;
    NUM(num);
    printf("\n");
    DOBRO(num);
    return 0;
}
  • Você declarou num mas não inicializou.
  • Passou um valor desconhecido para NUM
  • NUM() retorna um int, mas você desprezou
  • pulou uma linha na tela, do nada
  • chamou a tal função DOBRO(), mas passou um valor desconhecido
  • onde está a função que recebe 3 números?

Sugiro pensar melhor nisso e reescrever

  • Curtir 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!