Ir para conteúdo
Fórum Script Brasil
  • 0

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


Blck_well

Pergunta

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 🙂

Editado por Blck_well
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...