Jump to content

Recommended Posts

Posted (edited)

Boas tardes, nao pego no c ha algum tempo e tou a fazer alguma coisa estupida no meu prog .

O problema esta no facto de eu ler 1 variavel numa funcao e nao a estar a passar para o main.

vejam:

#include <stdio.h>
int teste(int num)
{
   printf("introduz um numero!\n");
   scanf(" %d", &num);
   return num;
}
main() {
   int num1=0;
   teste(num1);
   printf(" %d\n",num1);
}
Edited by pmg
LP adicionada; indentacao 4 espacos adicionada
Posted

primeiro : C não é a mesma coisa que C#, as diferenças são abismais.

segundo : em C, todas as chamadas de funções têm os parâmetros com passagem por valor (e não por referência). isto quer dizer que quando chamas a função teste com uma variável, o que estás a fazer é realmente enviar o valor guardado na variável e não a variável em si. é essa a razão que na função teste estás a devolver o valor para que na função main guardes ou o manipules de alguma forma.

conclusão, basta:

num1 = teste(num1); // guardar o resultado da chamada da função na variável [i]num1[/i] do [i]main[/i] 
IRC : sim, é algo que ainda existe >> #p@p
Posted

Assim estás apenas a retornar o valor da variavel e não a atribuir a num1 na main

Ou retornas e associas:

#include <stdio.h>
int teste(){
int num;
printf("introduz um numero!\n");
scanf(" %d", &num);
return num;
}
int main() {
int num1=0;
num1=teste();
printf("%d\n",num1);

return 1;
}

Ou alteras o valor de num1 com o seu apontador em teste:

#include <stdio.h>
void teste(int *num){

   printf("introduz um numero!\n");
   scanf("%d", num); // Repara que não precisas do &
}
int main() {
   int num1=0;
   teste(&num1);
   printf("%d\n",num1);

   return 1;
}
Posted (edited)

o problema é que neste caso você está passando int por valor e não por referência (como parece ser o que você quer fazer), ao passar por valor, o que acontece é que ao passar o valor para a função, ele não passar a variável original e sim uma cópia dela.

O certo seria algo assim:

#include <stdio.h>
void teste(int *num)
{
   printf("introduz um numero!\n");
   scanf(" %d", num);

}
main() {
   int num1=0;
   teste(&num1);
   printf(" %d\n",num1);
}
Edited by pmg
LP e identacao (4 espacos) adicionada

Fernando Lage Bastos - MCP/MCTS/MCPD

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.