Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

A função, penso que está correta, mas..... tem um 'mas'!

No código abaixo, peço para digitar dois inteiros que são utilizados na soma. É possível visualizar que o ponteiro foi utilizado corretamente: a variável assume o seu novo valor, dado pela função. O 'porém' é que quando rodo o programa ele me pede sempre 3 'scanf'. Ou seja, tenho de digitar 3 inteiros para ele executar. De fato ele faz a soma correta dos dois primeiros, mas porque ele me pede para digitar algo mais?

#include <stdio.h>


/*
Introdução à linguagem 'C'. Exercício:
Escreva uma função 'soma' que recebe um ponteiro de inteiro 'num'
e mais dois inteiros a e b. 
A função deve calcular a soma de a+b em num.
*/


void soma(int* num, int a, int b) {
    *num = a + b;
    printf("soma num = %d\n", *num);
}

int main() {
    int num = 0;
    int a;
    int b ;
    scanf("%d\n", &a);
    scanf("%d\n", &b);
    printf("main num = %d\n", num);
    soma(&num, a, b);
    printf("main num = %d\n", num);

}
2 respostas
solução

Olá Eliezer.

Essa situação está acontecendo por conta dos \n que você inclui no scanf

    scanf("%d\n", &a);
    scanf("%d\n", &b);

Para resolver basta remove-los:

    scanf("%d", &a);
    scanf("%d", &b);

Detalhes do funcionamento do scanf estão na documentação, bons estudos.

Fantástico! Muito obrigado Igor, estarei atento a este tipo de detalhe daqui para frente.