pr0zin Posted October 2, 2012 at 02:39 PM Report #477434 Posted October 2, 2012 at 02:39 PM (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 October 2, 2012 at 02:52 PM by pmg LP adicionada; indentacao 4 espacos adicionada
HappyHippyHippo Posted October 2, 2012 at 02:45 PM Report #477436 Posted October 2, 2012 at 02:45 PM 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 Portugol Plus
KiNgPiTo Posted October 2, 2012 at 02:46 PM Report #477437 Posted October 2, 2012 at 02:46 PM 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; }
pr0zin Posted October 2, 2012 at 02:49 PM Author Report #477438 Posted October 2, 2012 at 02:49 PM o problema residia no facto de eu no scanf estar a fazer com & quando estava a declarar como apontador!!! thanks ah e ai esqeci-me do teste( int *num)
petvetbr Posted October 2, 2012 at 02:51 PM Report #477439 Posted October 2, 2012 at 02:51 PM (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 October 2, 2012 at 02:54 PM by pmg LP e identacao (4 espacos) adicionada Fernando Lage Bastos - MCP/MCTS/MCPD
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now