Jump to content
Fórum Script Brasil
  • 0

Alguém pode me explicar o que está acontecendo nesse código?


Question

Olá, eu estava brincando com um exercício de estruturas com o seguinte problema: 

/*3. Crie uma estrutura para armazenar os dados de retângulos (pontos diagonais inferioresquerda
e superior-direita). Crie um algoritmo que permita ler, armazenar e imprimir uma
quantidade TAM de retângulos.*/

ESSE FOI O CÓDIGO QUE CRIEI: 

#include <stdio.h>

struct retangulos {

float pontoDIE; //PONTO DIAGONAL INFERIOR ESQUERDO
float pontoDSD; //PONTO DIAGONAL SUPERIOR DIREITO

};

int main (void) {
int TAM = 1;
int digito = 1;
struct retangulos retangulo[TAM];

while (digito != 2) {

printf("Digite os valores do PONTO DIAGONAL INFERIOR ESQUERDO e PONTO DIAGONAL SUPERIOR DIREITO: \n");
 scanf("%f %f", &retangulo->pontoDIE, &retangulo->pontoDSD);

printf("Desejas acrescentar mais retangulos: (1)SIM, (2)não: \n");
 scanf("%d", &digito);
  if(digito == 1)
    TAM++;
}

printf("O numero de TAM de retangulos e %d\n", TAM);


return 0;

}
MINHA DÚVIDA É: 

Não consegui compilar os scanf da forma que considero correta =>  scanf("%f %f", &retangulo.pontoDIE, &retangulo.pontoDSD);

O compilador me obrigou a usar esse jeito =>  scanf("%f %f", &retangulo->pontoDIE, &retangulo->pontoDSD);

Mas não estou usando ponteiros então, gostaria de saber o que está acontecendo.

Obrigado 🙂

Edited by Blck_well
Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Ao postar seu código no fórum, use a ferramenta de inserção de código (quarto ícone do menu).
 

8 horas atrás, Blck_well disse:

 scanf("%f %f", &retangulo.pontoDIE

Você definiu retangulo como um vetor de estruturas do tipo struct retangulos. Em C, o valor de um vetor é um ponteiro (endereço de memória) que aponta para a primeira casa do vetor. Sendo assim, você precisaria recuperar a estrutura apontada pelo ponteiro antes de acessar o atributo pontoDIE:

 scanf("%f %f", &(*retangulo).pontoDIE

Ao se trabalhar com ponteiros e estruturas em C, é frequente a necessidade de obtenção do valor apontado pelo ponteiro e acesso aos campos da estrutura. Para abreviar a notação acima, C adicionou o operador de seta:

 scanf("%f %f", &retangulo->pontoDIE

E este é o motivo pelo qual seu código funciona assim. Todavia, você não deseja trabalhar somente como o primeiro valor do vetor, e sim ir adicionando a medida que o usuário demande. Sendo assim, seu código deve fazer a adequada referência aos índices do vetor retangulos:

#include <stdio.h>

#define MAX_SIZE 3

typedef struct retangulo{
    float pontoDIE; //PONTO DIAGONAL INFERIOR ESQUERDO
    float pontoDSD; //PONTO DIAGONAL SUPERIOR DIREITO
} Retangulo;

int main () {
    int tam = 1;
    int digito = 1;
    Retangulo retangulos[MAX_SIZE];
    
    while (digito != 2 && tam < MAX_SIZE) {
        
        printf("Digite os valores do PONTO DIAGONAL INFERIOR ESQUERDO e PONTO DIAGONAL SUPERIOR DIREITO do retângulo %d: \n", tam);
        scanf("%f %f", &retangulos[tam-1].pontoDIE, &retangulos[tam-1].pontoDSD);
        
        printf("Desejas acrescentar mais retangulos: (1)SIM, (2)não: \n");
        scanf("%d", &digito);
        if(digito == 1){
            tam++;
        }
    }
    
    printf("O numero de TAM de retangulos e %d\n", tam);
    
    
    return 0;

}

Extras:
- Utilize a instrução typedef para renomear suas estruturas e facilitar as referências.

- Declare suas constantes através da diretiva #define para facilitar posterior alteração do seu valor.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148955
    • Total Posts
      645010
×
×
  • Create New...