[C] Programma Rettangolo-Punto

franzu1
Devo realizzare un programma in C che date le coordinate di un punto verifica se è interno ad un dato rettangolo (che può avere i lati solo paralleli agli assi coordinati).
Deve essere fatto creando delle strutture per il punto e il per il rettangolo.
Questo è il codice che ho scritto:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct punto
       {
        char nome;
        float x;
        float y;
       };
 struct rettangolo
       {
        float verticale1;
        float verticale2;
        float orizzontale1;
        float orizzontale2;
       };
int ordina (struct rettangolo R)
   {
    float a;
    if (R.verticale1>R.verticale2)
      {
       a=R.verticale1;
       R.verticale1=R.verticale2;
       R.verticale2=a;
      }
    if (R.orizzontale1>R.orizzontale2)
      {
       a=R.orizzontale1;
       R.orizzontale1=R.orizzontale2;
       R.orizzontale2=a;
      }
    return;
   }
int internoesterno (struct punto P, struct rettangolo R)
   {
    if (((R.verticale1<P.x) && (P.x<R.verticale2)) &&   ((R.orizzontale1<P.y) && (P.y<R.orizzontale2)))
      {
       printf("%s", "Il punto ");
       printf("%s", P.nome);
       printf("%s\n", " è interno al rettangolo.");
      }
    else
        {
         printf("%s", "Il punto ");
         printf("%s", P.nome);
         printf("%s\n", " è esterno al rettangolo.");
        }
    return;
   }
int main (int argc, char*argv[])
{
 struct punto P;
 struct rettangolo R;
 scanf("%c\n", &(P).nome);
 scanf("%f\n", &(P).x);
 scanf("%f\n", &(P).y);
 scanf("%f\n", &(R).verticale1);
 scanf("%f\n", &(R).verticale2);
 scanf("%f\n", &(R).orizzontale1);
 scanf("%f\n", &(R).orizzontale2);
 ordina(R);
 internoesterno(P, R);
exit(EXIT_SUCCESS);
}


La compilazione funziona. quando parte però dopo aver inserito i dati mi da egmentation error.
Dov'è il problema? non ho grande dimestichezza con gli struct essendo il primo programma in cui li uso.
Grazie anticipatamente per l'aiuto.

Risposte
apatriarca
NdM: Ho editato il tuo post in modo che usasse il tag code per mostrare il codice. Ricordati di usarlo in futuro.

Il problema è comunque probabilmente in questa riga:
scanf("%c\n", &(P).nome);

Perché i punti hanno un nome? E soprattutto perché usi un carattere e lo leggi in quel modo? Sono certo che quella riga faccia qualcosa di completamente diverso da quello che ti aspetti..

franzu1
bene! così funziona. una domanda: io chiedo di inserire sei valori in imput ma invece il programma me ne chiede 7. funziona comunque. ma vorrei saper perchè.

vict85
"franzu":
bene! così funziona. una domanda: io chiedo di inserire sei valori in imput ma invece il programma me ne chiede 7. funziona comunque. ma vorrei saper perchè.


Hai 7 scanf.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.