RISOLTO subscripted value is neither array nor pointer nor vector

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Salve a tutti,
Allora, io dovrei fare un programma usando le strutture in modo che mi stampi a video un piano cartesiano e il perimetro di un rettangolo (devo immettere io due vertici).
Non sapendo come fare, ho pensato di usare un array bidimensionale, dove nelle coordinate del perimetro imposto il valore ' * ' (array di char).
Ora, non mi soffermo sulla validità del codice in generale (per quello ci penso dopo), ma in fase di compilazione mi riporta questo errore: funzionerettangolo.c:89:5: error: subscripted value is neither array nor pointer nor vector a[b.ascissa][a.ordinata] = ' * '; (questo errore si ripete ovviamente per tutte le righe uguali).
Quale sarebbe l'errore? Preciso che all'università non abbiamo ancora affrontato i puntatori ( suppongo si riferisca a quello l'errore).
Grazie dell'aiuto!
Codice:
struct punto{
    
    int ordinata;
    int ascissa;
    
};

bool CheckValue(struct punto p) {
    
    if(p.ascissa < 0 || p.ascissa > 9 ) {
        return 0;
    }
    else if(p.ordinata < 0 || p.ordinata > 9 ) {
        return 0;
    }
    else
        return 1;

}

struct punto inserisci_punto(){
    
    struct punto p;
    
    do {
        printf("Inserisci l'ascissa:\n");
        scanf("%i", &p.ascissa);
        printf("Inserisci l'ordinata:\n");
        scanf("%i", &p.ordinata);
    } while (CheckValue(p)!= 1);
    
    return p;
        
}

struct rettangolo crea_rettangolo(struct punto a, struct punto b) {
    
    if(a.ascissa >= b.ascissa) {
        while(b.ascissa!= a.ascissa) {
            a[b.ascissa][a.ordinata] = '*';
            b.ascissa++;
        }
    }
    else {
        while(a.ascissa!= b.ascissa) {
            a[a.ascissa][a.ordinata] = '*';
            a.ascissa++;
        }
    }
    if(a.ascissa >= b.ascissa) {
        while(b.ascissa!= a.ascissa) {
            a[b.ascissa][b.ordinata] = '*';
            b.ascissa++;
        }
    }
    else {
        while(a.ascissa!= b.ascissa) {
            a[a.ascissa][b.ordinata] = '*';
            a.ascissa++;
        }
    }
    if(a.ordinata >= b.ordinata) {
        while(b.ordinata != a.ordinata) {
            a[a.ascissa][b.ordinata] = '*';
            b.ordinata++;
        }
    }
    else {
        while(a.ordinata!= b.ordinata) {
            a[a.ascissa][a.ordinata] = '*';
            a.ordinata++;
        }
    }
    if(a.ordinata >= b.ordinata) {
        while(b.ordinata != a.ordinata) {
            a[b.ascissa][b.ordinata] = '*';
            b.ordinata++;
        }
    }
    else {
        while(a.ordinata!= b.ordinata) {
            a[b.ascissa][a.ordinata] = '*';
            a.ordinata++;
        }
    }
}
 
M

Mursey

Ospite
Stai usando a come se si trattasse di una sorta di matrice ma e' una struct.
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Stai usando a come se si trattasse di una sorta di matrice ma e' una struct.
Una soluzione quale potrebbe essere? Ha spiegato da poco le struct, quindi devo capirle ancora bene. Una struct non può contenere array all'interno (contanto che una struct è un'array multitipo alla fin fine)?
 
M

Mursey

Ospite
La tua struct e'
Codice:
struct punto{
    int ordinata;
    int ascissa; 
};
Vedilo come un oggetto che ha due proprieta' numeriche.
Quindi puoi creare un oggetto di tipo punto e impostare ordinata e ascissa. E basta.

Se hai bisogno invece di memorizzare un valore a certe coordinate la struct non serve ma basta una matrice.
 

rodhellas

Utente Èlite
1,522
427
CPU
Ryzen 5 3600
Dissipatore
GELID Phantom
Scheda Madre
MSI B450 Gaming Plus Max
HDD
500GB m.2 + 2TB HDD
RAM
16GB Corsair LPX 3000mhz
GPU
Gigabyte GTX 960 OC
Audio
Integrata
Monitor
SyncMaster 223BW
PSU
Antec HCG-520M
Case
Meshify C
Net
Gigabit Fastweb
OS
Windows 10 64bit
Grazie mille dell'aiuto, mi ero anche dimenticato di dichiarare lo struct rettangolo. Comunque ho risolto utilizzando vari if/else e loop vari al posto dell'array!
 
  • Mi piace
Reazioni: Mursey

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili