Jump to content

Diferença na declaração de variaveis.


pedrosimoes

Recommended Posts

Boas, a minha dúvida é o seguinte:

Quando fazemos um programa em c, normalmente usamos varias funções cada uma destinada a uma determinada tarefa. A minha duvida é saber qual a diferença entre:

#include <stdio.h>
funcao (int x)
{}

e

#include <stdio.h>
funcao ()
{ int x;}

Já tentei testar com varios programas e continuo a não eprceber muito bem a diferença!

Link to comment
Share on other sites

A diferença é que se chamares a função a partir de outra, por exemplo do main, se tiveres funcao(int x), vais poder associar um parâmetro... ou seja, passar um valor para a função que estas a chamar enquanto que a outra apenas estás a declarar uma variável que é usada dentro da função e não podes atribuir um valor directamente a partir de um outro local.

Um exemplo é uma simples função de somar...

Caso tenhas:

int somar (int v1, int v2){

return v1 + v2;

}

int main(){

printf("A soma e %d", somar(5,3)); // Estás a passar um 5 e um 3 o que vai dar 8, mas a utilização faz com que decidas os parâmetros da função que vais chamar por aqui

return 0;
}

Por outro lado:

int somar (){ // Aqui não recebes nada da função através da qual chamas esta, logo vais trabalhar com variáveis apenas dentro da função..

return 5 + 3;

}

int main(){

printf("A soma e %d", somar()); // Não podes passar nada pois a função não aceita parâmetros e estás limitado ao que acontecer na função..

return 0;
}
Link to comment
Share on other sites

Sim, já entendi! Já agora podem dar uma vista de olhos no programa que fiz? É simples mas foi mesmo so para aplicar a materia das funçoes.

#include <stdio.h>

int ler ()
{
int x;
printf("Escolha o numero da tabuada:");
scanf("%d", &x);
return x;

}
void escrever(int x, int y)
{

printf("\n%d * %d =%d",x,y,x*y);
}
void tabuada ()
{
int y;

for (y=1;y<11;y++)

}
void main()
{
int a;
a=ler();
tabuada (a);

Nao faz exactamente o que queria. Só indica a primeira multiplicaçao da tabuada e queria ate 10.

Link to comment
Share on other sites

Bem acho que estão aí algumas coisas mal, na função main usaste a função tabuada com um argumento, e na própria função não existe nenhum, depois a função tabuada está incompleta. O código ficaria mais ou menos assim:

#include <stdio.h>

int ler ()
{
        int x;
        printf("Escolha o numero da tabuada:");
        scanf("%d", &x);
        return x;
}
void escrever(int x)
{
        int y;
        for(y=0; y<11; y++)
       { 
           printf("\n%d * %d =%d",x,y,x*y);
       }
}

void main()
{
        int a;
        a=ler();
        escrever(a);
        printf("\n");
        system("pause");
}

p.s. Tirei-te aí uma função por achar inútil e acrescentei um system("pause"); caso estejas em windows, caso não tira 😄

here since 2009

Link to comment
Share on other sites

Eu fiz assim e deu.me bem!

#include <stdio.h>

int ler ()
{
int x;
printf("Escolha o numero da tabuada:");
scanf("%d", &x);
return x;

}
void escrever(int x, int y)
{

printf("\n%d * %d =%d",x,y,x*y);
}
void tabuada (int x)
{
int y;
for (y=1;y<11;y++)
	escrever (x,y);

}
void main()
{
int a;
a=ler();
tabuada(a);
}
Link to comment
Share on other sites

Não tenho a certeza do que estás a perguntar mas acho que o que queres é mudar o valor de uma variável que está numa outra função, para fazeres isso tens de usar uma coisa chamada 'Chamada por referência' em que forneces o endereço de memória de uma variável de uma outra função e que podes mudá-la com uma simples atribuição.

here since 2009

Link to comment
Share on other sites

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.