Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

código pedindo base e expoente

aleterei o código para ficar interativo, de modo que ele "pede" ao usuário a base e o expoente para fazer o cálculo. (tem pergunta depois do código)

#include <stdio.h>

void potencia(int base, int expoente) {
    int resultado = 1;
    if (expoente == 0){
        resultado = 0;
    } else if (expoente == 1) {
        resultado = base;
    } else {
        for (int i = 1; i <= expoente; i++){
            resultado = resultado * base;
        }
    }
    printf("%d ^ %d = %d", base, expoente, resultado);
}

int main () {
    int a;
    int b;

    printf("Base: ");
    scanf("%d", &a);

    printf("Expoente: ");
    scanf("%d", &b);

    potencia(a,b);
}

estou tentando passar o trecho com os scanf para uma função pedenumeros(), mas não consigo atribuir os valores digitados às variáveis a** e **b para que sejam usadas também pela função potencia

como seria possível fazer isso para aplicar a proposta do professor de transformar os comandos em funções ao invés de deixá-los ali no corpo do programa?

3 respostas
solução!

Fala Caique, tudo certo?

Olha, para essa questão em si, do jeito que você fez já tá bem legal, não precisaria de uma função que pegasse os números para depois usa-los em outra função. Mas caso queira fazer isso, vai ser preciso usar um conceito mais avançado que é o uso de ponteiros. Vou colocar aqui um exemplo de como ficaria essa função e logo abaixo vou explica-la.

void pedenumeros(int *a, int *b) {
    printf("Base: ");
    scanf("%d", a);

    printf("Expoente: ");
    scanf("%d", b);
}

int main () {
    int a;
    int b;

    pedenumeros(&a, &b);
    potencia(a,b);
}

Então, o que está acontecendo é o seguinte, as variáveis "a" e "b" estão sendo criadas localmente na nossa "main", por isso não dá para acessa-lás diretamente em outras funções, já que elas só existem na "main". No entanto, se colocar um asterisco na frente da variável (isso no escopo da função) e, na chamada da função colocar o "&", você estará passando o endereço da variável. E ai, tudo o que for feito dentro da função será refletido lá na main. Resumindo, dessa forma você diz para o computador que quer alterar os valores específicamente dessas váriaveis, não importando aonde elas foram criadas. Fique atento que no scanf, na função "pedenumeros", não se usa o "&" para armazenar os valores. Isso tem relação com a forma que passamos essas variáveis para a função.

Deu pra entender? Qualquer coisa é só falar!

oi, andré! muito obrigado, deu sim pra entender sua explicação :)

no scanf dentro de pedenumeros a gente nao passa com o & porque passamos pra função o CONTEÚDO da variável, né? pra isso que usamos o *a e *b

gostei!

eu só quis fazer isso para praticar, mesmo, já que nessa altura so curso estávamos exercitando isso de criar funções

abraço!

Exatamente! Muito show Caique! Que bom que deu pra endender, fico feliz :)