Ir ao conteúdo
  • Cadastre-se
Renato Veronese

C - função não está printando os números lidos

Recommended Posts

Boa tarde.

 

Tenho uma biblioteca chamada "biblioteca.h" e tenho um arquivo chamado Exercicio17.C, estou tentando fazer a entrada de dados, porém, ao dar printf nos numeros que foram lidos, por algum motivo está printando "0".

Alguém pode ajudar?

 

Biblioteca:

#include <stdio.h>
#include <stdlib.h>
  
void entradaex17(int num1, int num2){
	printf("Informe dois valores: ");
	scanf("%i %i", &num1, &num2);
}


Arquivo C:
#include <stdio.h>
#include <stdlib.h>
#include "biblioteca.h"

int main(){
    int n1,n2,resto;
    entradaex17(n1,n2);
    printf("n1 %i n2 %i \n", n1, n2);
  
  

Como faço pro meu arquivo C printar os números que foram lidos na função da biblioteca?

Editado por Renato Veronese

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não posso afirmar com certeza porque não testei o código e ainda sou iniciante em programação C, mas acho que o problema ai são dois:

1) A função void não tem retorno;

2) você está chamando a função, mas não está retornando nenhum valor;

 

Acho que para resolver o problema você devia mudar o tipo da função e adicionar o return nela ou mudar esse printf do main para a função void. (nunca tentei retornar mais de 1 valor de uma função e nem sei se dá :/)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro você deve usar o guard para que não haja dupla inclusão de arquivos(stdio.h/stdlib.h).

 

Segundo ponto a destacar é que você está passando os dados por parâmetros, isso quer dizer que você está alterando uma cópia dos números e não os números em si, tanto num1 como num2 dentro de entradaex17 não passam de copias de n1 e n2 de main. Para solucionar esse problema você precisa passar os autênticos números. Como se faz? Pois passando por referencia! Isso quer dizer que você passa o numero da direção de n1 e n2 e não o valor de ambas variáveis, dai a função entradaex17 entende que tem que procurar esses números na memória e altera-los os originais e não uma copia.

E tam falta o return como no main que por alguma razão não entrou.

entradaex17.c
 

#include <stdio.h>
#include <stdlib.h>
#include "biblioteca.h"

int main(){
    int n1,n2;

    entradaex17(&n1,&n2);
    
    
    printf("n1 %i n2 %i \n", n1, n2);
    return 0;
}

Mude o .C (em maiúscula) de "entradaex17.C" para .c(minúscula) "entradaex17.c" . Pode parecer estranho mas para mim tava gerando erros ao compilar.

 

biblioteca.h com guard adicionado
 

#ifndef BIBLIOTECA_H
#define BIBLIOTECA_H

#include <stdio.h>
#include <stdlib.h>
  
void entradaex17(int *num1, int *num2){
	
	printf("Informe dois valores: ");
	scanf("%i %i", num1, num2);
}


#endif // BIBLIOTECA_H

 

  • Curtir 1

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

×