1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Estruturas/Registo e Apontadores em C

Discussão em 'Programação' iniciada por blue_sky, 5 de Janeiro de 2013. (Respostas: 5; Visualizações: 642)

  1. blue_sky

    blue_sky Power Member

    Boas, estou a realizar um programa que contem a seguinte função:

    void soma_complexo (complexo c1, complexo c2, complexo *c3)
    {
    c3->a= (c1.a) + (c2.a);
    c3->b= (c1.b) + (c2.b);
    }

    sendo que complexo foi definido assim:

    typedef struct {
    float a;
    float b;
    } complexo;

    Devo estar a cometer um erro bastante estúpido/grave porque o "programa" empanca nesta parte e deixa de funcionar (quando chamo esta função), alguém me pode dizer o que tenho mal?

    Cumps
     
  2. Meados

    Meados Power Member

    Como estas a chamar a função? Como estas a declarar/inicializar c1, c2 e c3 (passados à função)?
     
  3. O código que apresentas-te está correcto. O problema deve estar na chamada à função soma_complexo. Verifica se estás a passar os argumentos de forma correcta, ou seja, soma_complexo(complexo, complexo, ponteiro para complexo).
    Deixo aqui um exemplo simples:

    Código:
    int main(){
        complexo comp1 = {1,2};
        complexo comp2 = {3,4};
        complexo comp3;
        soma_complexo(comp1, comp2, &comp3);
        printf("(%f, %f)", comp3.a, comp3.b); /* output: (4.000000, 6.000000) */
        return 0;
    }
     
  4. blue_sky

    blue_sky Power Member

    Código:
    #include <stdio.h>
    
    typedef struct {
        float a;
        float b; 
        } complexo;
            
    void le_complexo(complexo *c)
    {
        puts("Parte Real?");
        scanf("%f", &c->a);
        puts("Parte Imaginária?");
        scanf("%f", &c->b);   
    }
    
    
    void escreve_complexo(complexo c)
    {
        printf ("Complexo = %.2f + %.2fi\n",c.a, c.b);
    }
    
    
    void soma_complexo(complexo c1, complexo c2, complexo *c3)
    {
        c3->a= (c1.a) + (c2.a);
        c3->b= (c1.b) + (c2.b);      
    }
    
    main()
    {
        complexo A, B, C;
        le_complexo (&A);
        escreve_complexo (A);
        
        le_complexo (&B);
        escreve_complexo (B);
        
        soma_complexo(A,B, &C); 
    }
    
    
    Sendo que até ao soma_complexo, o programa faz o pretendido.
    Depois tenho mais umas coisas, mas o problema não está aí, porque se não puser o "soma_complexo(A,B, &C); " ele corre bem.

    Não consigo mesmo ver o que estou a fazer mal, não sei se é do compilador ou não, mas não consigo encontrar o erro
     
  5. blue_sky

    blue_sky Power Member

    Acho que era um problema do Windows, ou do compilador que usei.
    Testei no Linux e deu certinho.
    Obrigado
     

Partilhar esta Página