fbotta (Normal User)
Newbie
Messaggi: 6
Iscritto: 23/08/2017
|
Ciao a tutti sono relativamente nuovo di qua.
ho piu problemi a capire come mai il mio programma non compila.
ho capito dove sbaglio ma non so come sistemare non essendo esperto di programmazione.
l'esercizio chiede di creare una funzione che dati i seguenti dati strutturati se il codice all'interno della lista è uguale a quello del puntatore a caratteri salva il nodo in un'altra lista e restituisce di return il numero di elementi nella lista.
questo è il mio codice:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstring> using namespace std; struct prodotto { char* codice[13]; char* data[11]; float prezzo; int pi; unsigned int tipologia; }; struct lista{ prodotto informazioni; lista* next; }; int prendiprodottiinelenco(lista* L, char* codici[12], prodotto prods[], int size) { int prodottitrovati=0, i=0; lista* testa; testa=L; for(i=0;codici[i]!=0;i++) //la condizione puo anche essere i=size, forse è piu giusto { for(;testa->next!=NULL;testa=testa->next) { if(strcmp(testa->informazioni->codice , codici[i])==0) { strcpy (prods[i],testa); prodottitrovati++; break; } if(strcmp(prods[i]->codice , testa.informazioni.codice)!=0) { prods[i]->codice = 0; } } testa=L; } return prodottitrovati; } }
|
mi da svariati errori, tutti probabilmente simili.
ad esempio
Codice sorgente - presumibilmente Plain Text |
if(strcmp(testa->informazioni->codice , codici[i])==0)
|
in questa riga di codice mi dice che non riesce a convertire char** in const char.
so che con strcmp devono essere const char ma come modifico il codice affinchè il problema si risolva?
oppure qua
Codice sorgente - presumibilmente Plain Text |
dove l'errore è:[Error] cannot convert 'prodotto' to 'char*' for argument '1' to 'char* strcpy(char*, const char*)'
oppure
Codice sorgente - presumibilmente Plain Text |
if(strcmp(prods[i]->codice , testa.informazioni.codice)!=0)
|
[Error] base operand of '->' has non-pointer type 'prodotto'
spero di non aver violato nessuna regola del regolamento.
grazie in anticipo per l'aiuto
francesco |
|
Mikelius (Member)
Expert
Messaggi: 525
Iscritto: 14/04/2017
|
Postato originariamente da fbotta:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstring> using namespace std; struct prodotto { char* codice[13]; char* data[11]; float prezzo; int pi; unsigned int tipologia; };
|
|
Sicuro che la struct sia giusta?
codice e data sono stringhe o vettori di stringhe?
Codice sorgente - presumibilmente Plain Text |
Stai copiando una struct TESTA in una PRODOTTO, come mettere 5 litri in una bottiglia di 2. A parte che la funzione è per le strighe e non per le struct.
Codice sorgente - presumibilmente C/C++ |
[Error] base operand of '->' has non-pointer type 'prodotto'
|
la variabile non è un puntatore quindi per i suoi menbri devi accedere tramite il ' . ' e non '->'
ed attento che anche qui stai passando vettori di stringhe e non stringhe.
Ultima modifica effettuata da Mikelius il 10/10/2017 alle 18:51 |
|
fbotta (Normal User)
Newbie
Messaggi: 6
Iscritto: 23/08/2017
|
codice e data
non sono ne stringhe ne vettori di stringhe
sono puntatori a carattere cioè un vettore contenente puntatori a stringhe
Ultima modifica effettuata da fbotta il 11/10/2017 alle 14:48 |
|
Roby94 (Member)
Guru
Messaggi: 1170
Iscritto: 28/12/2009
|
Postato originariamente da fbotta:
sono puntatori a carattere cioè un vettore contenente puntatori a stringhe
|
Questa tua affermazione non è ne coerente con il tuo codice ne coerente con se stessa. Se sono puntatori a carattere non sono vettori di puntatori a stringhe. Spiega cosa dovrebbero rappresentare slegati dalle formalità del C. Devono rappresentare due stringhe, una per la data(testuale) e una per un codice (es alfanumerico)? |
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da fbotta:
codice e data
non sono ne stringhe ne vettori di stringhe
sono puntatori a carattere cioè un vettore contenente puntatori a stringhe
|
Quello che hai scritto non ha nessun senso ...
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
fbotta (Normal User)
Newbie
Messaggi: 6
Iscritto: 23/08/2017
|
scusate probabilmente non avendo idea dell'entità dell'errore non posso essere utile neanche a dare indicazioni per la risoluzione dello stesso.
allego una foto del tema d'esame di modo che ogni eventuale mia incomprensione non sia d'intralcio.
Ultima modifica effettuata da fbotta il 12/10/2017 alle 9:48 |
|
TheDarkJuster (Member)
Guru^2
Messaggi: 1620
Iscritto: 27/09/2013
|
Leggi cos'è una stringa. Una stringa è un array, o vettore che dir si voglia di caratteri terminante con il carattere ASCII 0. Viene manipolato tramite il puntatore al suo primo carattere e può essere dichiarato così char* stringa.
Ovviamente poi devi eseguire un malloc per allocare la sua memoria nello heap. L'alternativa è dichiararlo così: char stringa[50] se vuoi che risieda nel stack.
Un vettore di stringe è un array di puntatori a puntatori, che a loro volta puntano ai primi caratteri della lista: char** stringhe. Se il numero di stringe è fisso: char* stringhe[3].
Le funzioni che manipolano le stringhe si aspettano il carattere terminatore, quindi strcpy fa la copia di tutti i caratteri finché non trova il primo 0. Dovevi usare memcpy, che copia un numero fisso (stabilito da te) di bytes.
Ora puoi parzialmente sistemare il tuo programma.
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6402
Iscritto: 03/01/2010
|
Postato originariamente da fbotta:
scusate probabilmente non avendo idea dell'entità dell'errore non posso essere utile neanche a dare indicazioni per la risoluzione dello stesso.
allego una foto del tema d'esame di modo che ogni eventuale mia incomprensione non sia d'intralcio. |
Quindi saranno
char codice[13];
char data[11];
ma questo tipo di confusione non dovresti averla nello svolgere questi semplici esercizi.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|