[C++] Problema con liste
Volevo fare un programma che inserisce in testa alla lista gli interi passati da tastiera e li stampa, ma dopo la stampa crasha, non capisco perchè!!
#include <cstdlib> #include <iostream> using namespace std; typedef struct dati{ int d; }; typedef struct nodo{ dati dato; nodo* next; }; nodo * InsertFirst (nodo* s, dati CurrD); void stampa(nodo* s); int main(int argc, char *argv[]) { nodo* s; dati d; int dim,i=0; cout<<"Quanti num vuoi inserire?"<<endl; scanf("%d",&dim); while (i<dim){ cout<<"Inserire dato:"<<endl; scanf("%d",&d); s = InsertFirst(s, d); i++;} stampa(s); system("PAUSE"); return EXIT_SUCCESS; } //FUNZIONI IMPLEMENTATE nodo * InsertFirst (nodo* s, dati CurrD) { nodo* p; nodo* q = new nodo; q->dato=CurrD; q->next=s; p=q; return p;} void stampa(nodo* s){ while (s != NULL){ cout <<s->dato.d<<"-"; s=s->next; } }
Risposte
secondo me il problema è quel scanf dentro il ciclo while, ma se metto
chi mi sa spiegare perchè?
cin>>d;mi da questo errore: no match for 'operator >>' in 'std::cin>>d'
chi mi sa spiegare perchè?
Perché mischi iostream e cstdio sullo stesso ambito? Non è generalmente una cosa consigliata.
L'errore comunque è che per il compilatore dati non è un int ma una struttura. Per correggere l'errore ti basta NON includere un singolo int in una struttura. È insensato.
L'errore comunque è che per il compilatore dati non è un int ma una struttura. Per correggere l'errore ti basta NON includere un singolo int in una struttura. È insensato.
Li ho mischiati perchè mi dava errore su
Comunque lo so che è insensato, l' ho fatto solo per abituarmi a lavorare con gli struct!
In ogni caso se voglio mantenere la struct dovrei mettere
Ma crasha lo stesso......ma perchè?
cin>>d;
Comunque lo so che è insensato, l' ho fatto solo per abituarmi a lavorare con gli struct!
In ogni caso se voglio mantenere la struct dovrei mettere
cin>>d.d;giusto?
Ma crasha lo stesso......ma perchè?
Semplicemente perché non hai inizializzato s per cui alla fine della lista non ci sarà NULL, ma un valore casuale che quando viene deferenziato manda in crash il tuo programma.
Non è comunque così che si dichiara un struttura in C++ (o C):
In C++ il typedef non è affatto necessario, per cui andrebbe scritto:
ma anche in C è sbagliato perché un typedef richiede che dopo il tipo venga inserito il nuovo nome da dare al tipo (e tu non ce lo hai messo). Per cui la versione corretta sarebbe piuttosto stata una delle seguenti:
typedef struct dati{ int d; };
In C++ il typedef non è affatto necessario, per cui andrebbe scritto:
struct dati { int d; };
ma anche in C è sbagliato perché un typedef richiede che dopo il tipo venga inserito il nuovo nome da dare al tipo (e tu non ce lo hai messo). Per cui la versione corretta sarebbe piuttosto stata una delle seguenti:
// 1 typedef struct dati { int d; } dati; // 2 typedef struct { int d; } dati; // 3 typedef struct dati dati; struct dati { int d; };
Grazie 100000
:-)
