PDA

Visualizza la versione completa : [C++] Errore di compilazione: variabile non dichiarata


nicone 91
29-12-2010, 13:22
spero che il titolo sia chiaro e grazie a alka per avervi detto come fare il post.


#include <stdio.h>
#include <iostream>
#include <malloc.h>
#include <string.h>
typedef struct {
char Nome[15]; //nome del contatto
char Cognome[15]; //cognome del contatto
char Numeroditelefono [20]; //numero di telefono
char Indirizzopaginaweb [50]; //indirizzo di pagina web
char Indirizzoemail [50]; //indirizzo email
} contatto; //struttura dell'agenda

struct record;//struttura con la variabile record

typedef record * L;//la variabile punta a L

typedef struct record{//struttura della variabile record
contatto a[];
L next;
} record;
void push (L c,contatto elem){
L b;
L k;
int n=0;
b=(L) malloc(sizeof(record));
b->next=c;
strcpy(b->a.Cognome,k);
}

void insert(L c,contatto elem[]){
int s=50;
int d=0;
int n=0;
while ((c!=NULL)&&(!d==0)){
if(elem>c->a) c=c->next;
if(elem<=c->a) d=1;
}
if(d==1)push(c,elem[n]);
for(n=0;n<s;n++){
printf("\nnome \n");
scanf("%s",&a[n].Nome);
strcpy(a[n].Nome,elem[n].Nome);
printf("\n._._._._._._._._._._._._.\n");
printf("\ncognome \n");
scanf("%s",&a[n].Cognome);
strcpy(a[n].Cognome,elem[n].Cognome);
printf("\n._._._._._._._._._._._._.\n");
printf("\nnumero di telefono \n");
scanf("%s",&a[n]Numeroditelefono); strcpy(a[n]Numeroditelefono,elem[n].Numeroditelefono); printf("\n._._._._._._._._._._._._.\n");
printf("\nindirizzo pagina web \n");
scanf("%s",&a[n].Indirizzopaginaweb); strcpy(a[n].Indirizzopaginaweb,elem[n].Indirizzopaginaweb); printf("\n._._._._._._._._._._._._.\n");
printf("\nindirizzo email \n");
scanf("%s",&a[n].Indirizzoemail); strcpy(a[n].Indirizzoemail,elem[n].Indirizzoemail); printf("\n._._._._._._._._._._._._.\n");
printf("\n^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^-^\n");
}}
void ordina(L c,contatto elem[]){
int n=0;
char f[50];
int s=50;
while(n<s){
if(strcmp(elem[n].Cognome,elem[n+1].Cognome)>0){

//scambia Cognomi
strcpy(f,elem[n].Cognome);
strcpy(elem[n].Cognome, elem[n+1].Cognome);
strcpy(elem[n+1].Cognome, f);

//Scambia Nomi
strcpy(f, elem[n].Nome);
strcpy(elem[n].Nome, elem[n+1].Nome);
strcpy(elem[n+1].Nome, f);

//Scambia numeri di telefono
strcpy(f, elem[n].Numeroditelefono);
strcpy(elem[n].Numeroditelefono, elem[n+1].Numeroditelefono);
strcpy(elem[n+1].Numeroditelefono,f);

//Scambia indirizzo di pagina web
strcpy(f, elem[n].Indirizzopaginaweb);
strcpy(elem[n].Indirizzopaginaweb, elem[n+1].Indirizzopaginaweb);
strcpy(elem[n+1].Indirizzopaginaweb,f);

//Scambia indirizzo email
strcpy(f, elem[n].Indirizzoemail);
strcpy(elem[n].Indirizzoemail, elem[n+1].Indirizzoemail);
strcpy(elem[n+1].Indirizzoemail, f);
}}}

void stampa(L c,contatto elem[]){
int n=0;
int s=50;
for(n=0;s<50;n++){
printf("%s\n%s\n%s\n%s\n%s\n",elem[n].Nome,elem[n].Cognome,elem[n].Numeroditelefono,elem[n].Indirizzopaginaweb,elem[n].Indirizzoemail);
} }

void leggi(L c,contatto elem[]){
int n=0;
int s=50;
char p[100];
printf("dammi il cognome che stai cercando");
scanf("%s",&p);
for(n=0;n<s;n++){
if(p==elem[n].Cognome){
stampa(c,elem);
}else{
printf("ERRORE: nessun elemento corrisponde a quello che stai cercando"); }}}
void Cancella(L c,contatto elem){
L b=c,tmpPunt2;
while(b!=NULL) {
tmpPunt2=b->next;
free(b);
b=tmpPunt2;
}
free(tmpPunt2);
}
int main (){
L a;
int n=0;
int s=50;
int q=0,Scelta;
//scelta del menu
int z=0,scelta;
////////////Menu///////////
do {
printf("1. Inserisci nuovo contatto \n");
printf("2. Visualizza lista contatti \n");
printf("3. immetti il numero del contatto che stai cercando \n");
printf("4. elimina contatto \n");
printf("5. elimina tutta la rubrica \n");
printf("6. Esci \n");
scanf("%d",&Scelta);
system("CLS");
switch(Scelta) {
case 1:
insert(c,elem);
ordina(c,elem);
break;
case 2:
stampa(c,elem);
break;
case 3:
printf("Inserisci il nome del contenuto da cui vuoi leggere:
\n");
scanf("%s",elem[n].Cognome);
leggi(c,elem);
break;
case 4:
do {
printf("1. elimina il primo contatto \n");
printf("2. elimina un contatto qualunque della lista
\n");
printf("3. elimina un contatto in coda \n");
printf("4. Esci \n");
scanf("%d",&scelta);
system("CLS");
switch(scelta){
case 1:
printf("1. elimina il primo contatto \n");
break;
case 2:
printf("1. elimina il primo contatto \n");
break;
case 3:
printf("1. elimina il primo contatto\n");
break;
}
system("PAUSE");
system("CLS");
}while(Scelta!=4);
break;
case 5:
printf("1. elimina il primo contatto \n");
Cancella(c,elem);
break;
}
system("PAUSE");
system("CLS");
}while(Scelta!=6);
return 0;
}





allora ripeto quello detto prima
in questo programma mi da un errore che non riesco a capire nella stringa
scanf("%s",&a[n].Nome);
il compilatore mi segnala che la variabile a non e dichiarata ma io lo dichiarata nella struttura

quindi se qualcuno puo aiutarmi e spiegarmi perch mi da questo problema mi farebbe un grande piacere
grazie per le vostre risposte in anticipo
e scusatemi se vi sto causando troppi problemi

Alex'87
29-12-2010, 13:55
Lasciando da parte il codice, scritto veramente male e abbastanza incomprensibile: la tua struttura "a" dichiarata s, ma all'interno di "record" (cos pare) e quindi non visibile dal punto in cui stai cercando di usarlo.

Inoltre stai acquisendo una stringa, l'operatore & pertanto non va messo.

nicone 91
29-12-2010, 13:57
ok grazie per il tuo aiuto

alka
29-12-2010, 17:53
Originariamente inviato da nicone 91
spero che il titolo sia chiaro

No, decisamente illeggibile. L'ho modificato io per darti un esempio.

nicone 91
29-12-2010, 18:04
ok grazie

cmq grazie a voi ho corretti gli errori di compilazione anche se mi trovo un errore nell'esecuzione del programma che non mi aspettavo

infatti il programma si ferma qui


strcpy(a[n].Numeroditelefono,elem[n].Numeroditelefono);

Alex'87
29-12-2010, 18:30
Originariamente inviato da nicone 91

infatti il programma si ferma qui


strcpy(a[n].Numeroditelefono,elem[n].Numeroditelefono); "I l programma si ferma qui" un po' vago, spiegati meglio... Si blocca? Crasha? Altro?

nicone 91
29-12-2010, 18:33
si blocca mi da un errore e poi la finestra schell si chiude

nicone 91
30-12-2010, 16:54
ehi alex se puo aiutarti adesso ti invio il file sorgente corretto cosi forse ti sara piu facile



#include <stdio.h>
#include <iostream>
#include <malloc.h>
#include <string.h>

typedef struct
{
char Nome[15]; //nome del contatto
char Cognome[15]; //cognome del contatto
char Numeroditelefono [20]; //numero di telefono
char Indirizzopaginaweb [50]; //indirizzo di pagina web
char Indirizzoemail [50]; //indirizzo email
} contatto; //struttura dell'agenda


struct record;//struttura con la variabile record

typedef record * L;//la variabile punta a L

typedef struct record{//struttura della variabile record
contatto a[];
L next;
} record;



void push (L c,contatto elem[]){
L b;
L k;
int n=0;

b=(L) malloc(sizeof(record));
b->next=c;
strcpy(b->a[n].Cognome,elem[n].Cognome);
}



void insert(L c,contatto elem[]){
int s=50;
int d=0;
int n=0;
contatto a[n];
while ((c!=NULL)&&(!d==0)){
if(elem>c->a) c=c->next;
if(elem<=c->a) d=1;
}
if(d==1)push(c,elem);

for(n=0;n<s;n++){

printf("nome \n");
scanf("%s",a[n].Nome);
strcmp(a[n].Nome,elem[n].Nome);

printf("\ncognome \n");
scanf("%s",a[n].Cognome);
strcmp(a[n].Cognome,elem[n].Cognome);

printf("\nnumero di telefono \n");
scanf("%s",a[n].Numeroditelefono);
strcpy(a[n].Numeroditelefono,elem[n].Numeroditelefono);

printf("\nindirizzo pagina web \n");
scanf("%s",a[n].Indirizzopaginaweb);
strcmp(a[n].Indirizzopaginaweb,elem[n].Indirizzopaginaweb);

printf("\nindirizzo email \n");
scanf("%s",a[n].Indirizzoemail);
strcmp(a[n].Indirizzoemail,elem[n].Indirizzoemail);
}}



void ordina(L c,contatto elem[]){
int n=0;
char f[50];
int s=50;
while(n<s){
if(strcmp(elem[n].Cognome,elem[n+1].Cognome)>0){
//scambia Cognomi
strcpy(f,elem[n].Cognome);
strcpy(elem[n].Cognome, elem[n+1].Cognome);
strcpy(elem[n+1].Cognome, f);

//Scambia Nomi
strcpy(f, elem[n].Nome);
strcpy(elem[n].Nome, elem[n+1].Nome);
strcpy(elem[n+1].Nome, f);

//Scambia numeri di telefono
strcpy(f, elem[n].Numeroditelefono);
strcpy(elem[n].Numeroditelefono, elem[n+1].Numeroditelefono);
strcpy(elem[n+1].Numeroditelefono,f);

//Scambia indirizzo di pagina web
strcpy(f, elem[n].Indirizzopaginaweb);
strcpy(elem[n].Indirizzopaginaweb, elem[n+1].Indirizzopaginaweb);
strcpy(elem[n+1].Indirizzopaginaweb,f);

//Scambia indirizzo email
strcpy(f, elem[n].Indirizzoemail);
strcpy(elem[n].Indirizzoemail, elem[n+1].Indirizzoemail);
strcpy(elem[n+1].Indirizzoemail, f);
}}}



void stampa(L c,contatto elem[]){
int n=0;
int s=50;
for(n=0;s<50;n++){
printf("%s\n%s\n%s\n%s\n%s\n",elem[n].Nome,elem[n].Cognome,elem[n].Numeroditelefono,elem[n].Indirizzopaginaweb,elem[n].Indirizzoemail);
}
}



void leggi(L c,contatto elem[]){
int n=0;
int s=50;
char p[100];
printf("dammi il cognome che stai cercando\n");
scanf("%s",&p);
for(n=0;n<s;n++){
if(p==elem[n].Cognome){
stampa(c,elem);
}else{
printf("\nERRORE: nessun elemento corrisponde a quello che stai cercando\n\n");
system("PAUSE");
break;
}}}



void Cancella(L c,contatto elem[]){

L b=c,tmpPunt2;
while(b!=NULL) {
tmpPunt2=b->next;
free(b);
b=tmpPunt2;
}
free(tmpPunt2);
}



int main (){
L c;
int n=0;
int s=50;
int q=0,Scelta; //scelta del menu
int z=0,scelta;
contatto elem[n];
////////////Menu///////////
do
{
printf("1. Inserisci nuovo contatto \n");
printf("2. Visualizza lista contatti \n");
printf("3. immetti il numero del contatto che stai cercando \n");
printf("4. elimina contatto \n");
printf("5. elimina tutta la rubrica \n");
printf("6. Esci \n");
scanf("%d",&Scelta);
system("CLS");
switch(Scelta)
{
case 1:
insert(c,elem);
ordina(c,elem);
break;
case 2:
stampa(c,elem);
break;
case 3:
leggi(c,elem);
break;
case 4:
do
{
printf("1. elimina il primo contatto \n");
printf("2. elimina un contatto qualunque della lista \n");
printf("3. elimina un contatto in coda \n");
printf("4. Esci \n");
scanf("%d",&scelta);
system("CLS");
switch(scelta){
case 1:
printf("1. elimina il primo contatto \n");

break;
case 2:
printf("1. elimina il primo contatto \n");

break;
case 3:
printf("1. elimina il primo contatto \n");

break;
}
system("PAUSE");
system("CLS");
}while(Scelta!=4);
break;
case 5:
Cancella(c,elem);
break;

}
system("PAUSE");
system("CLS");
}while(Scelta!=6);

return 0;
}




questa e una legenda ti aiutera a capire le lettere a cosa corrispondono

LEGENDA

a= fa parte della struttura contatto ed un elemento della rubrica


b=puntatore


c=primo elemento della lista linkata che punta agli elementi successivi


L=struttura di tipo L ed un puntatore della struttura record


n=numero dell'array della struttura


d=posizione trovata condizione per il giusto inserimento dei dati nella lista


f=variabile per effettuare lo scambio degli elementi


s=massimo di contatti possibili da inserire


spero che adesso mi possiate spiegare qual' il problema

Loading