Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi
Mate X7 rinnova la sfida nel segmento dei pieghevoli premium puntando su un design ancora più sottile e resistente, unito al ritorno dei processori proprietari della serie Kirin. L'assenza dei servizi Google e del 5G pesa ancora sull'esperienza utente, ma il comparto fotografico e la qualità costruttiva cercano di compensare queste mancanze strutturali con soluzioni ingegneristiche di altissimo livello
Nioh 3: souls-like punitivo e Action RPG
Nioh 3: souls-like punitivo e Action RPG
Nioh 3 aggiorna la formula Team NINJA con aree esplorabili più grandi, due stili di combattimento intercambiabili al volo (Samurai e Ninja) e un sistema di progressione pieno di attività, basi nemiche e sfide legate al Crogiolo. La recensione entra nel dettaglio su combattimento, build, progressione e requisiti PC
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti
La facilità di installazione e la completa automazione di tutte le fasi di utilizzo, rendono questo prodotto l'ideale per molti clienti. Ecco com'è andata la nostra prova in anteprima
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-01-2011, 18:25   #1
pettegola
Junior Member
 
Iscritto dal: Jan 2011
Messaggi: 3
help me c++!

Ciao a tutti!!! beh cm vedete sn nuova nel forum...così come nella programmazione! devo fare 1 rubrica telefonica e nn riesco a creare 1 funz decente che mi elimini un contatto!! xD qlk1 può aiutarmi??? thx!!!






#include<stdio.h>
#include<iostream>
#include<stdlib.h>





#define MAXCHAR 20

typedef
struct{
char cognome[MAXCHAR];
}inseriti;

typedef
struct{
char nome[MAXCHAR];
char numero[MAXCHAR];
char email[MAXCHAR];
char web[MAXCHAR];
char indirizzo[MAXCHAR];
}associati ;


typedef
struct {
inseriti contenuto;
associati valore;
}Contatto;



struct Lista;
typedef struct Lista *PuntUnElementoDellaLista;



typedef struct Lista{
Contatto elemento;
PuntUnElementoDellaLista next;
}Lista;

Lista* Inserisci(PuntUnElementoDellaLista pl, inseriti *contenuto, associati *valore){
PuntUnElementoDellaLista pTmp;
pTmp=(PuntUnElementoDellaLista)malloc(sizeof(Lista));

if (NULL != pTmp){
pTmp->next=pl;
strcpy(pTmp->elemento.valore.nome,valore->nome);
strcpy(pTmp->elemento.contenuto.cognome,contenuto->cognome);
strcpy(pTmp->elemento.valore.numero,valore->numero);
strcpy(pTmp->elemento.valore.email,valore->email);
strcpy(pTmp->elemento.valore.indirizzo,valore->indirizzo);
strcpy(pTmp->elemento.valore.web,valore->web);

}
return(pTmp);


void Stampa(PuntUnElementoDellaLista pl){
PuntUnElementoDellaLista pTmp=pl;

while (pTmp!=NULL){

printf("\n Cognome:\n %s",pTmp->elemento.contenuto.cognome);
printf("\n Nome: \n %s,",pTmp->elemento.valore.nome);
printf("\n Numero: \n %s",pTmp->elemento.valore.numero);
printf("\n Indirizzo:\n %s",pTmp->elemento.valore.indirizzo);
printf("\n Indirizzo e-mail:\n %s",pTmp->elemento.valore.email);
printf("\n Indirizzo web:\n %s",pTmp->elemento.valore.web);
pTmp=pTmp->next;
}
system("PAUSE");

}

void Elimina(PuntUnElementoDellaLista pl){

Contatto elem;
printf("Inserisci il cognome del contatto da eliminare");
scanf("%s",elem.contenuto.cognome);

PuntUnElementoDellaLista s,r;

if(pl->next!=NULL){
s=pl;
while(s->next!=NULL){
if(
strcmp(s->elemento.contenuto.cognome,elem.contenuto.cognome)){
r=s->next;
s->next=s->next->next;
free(r);
}
else s=s->next;
}
}
if(
strcpy(pl->elemento.contenuto.cognome,elem.contenuto.cognome)){
r=pl;
pl=pl->next;
free(r);
}
}
int main(){
PuntUnElementoDellaLista lista;
lista = NULL;

int i=0,scelta;
associati val;
inseriti cont;

do{ printf("Scegli una delle seguenti operazioni:\n");
printf("Digita 1 per Inserire i contatti nella rubrica\n");
printf("Digita 4 per visualizzare tutti i contatto in rubrica\n");
printf("Digita 5 per eliminare un elemento della rubrica\n");
scanf("%d",&scelta);
system("CLS");

switch(scelta){
case 1:


while (true){
char nome_temp[MAXCHAR];
printf("Inserisci il cognome dell'contatto (digita fine per terminare) n: %d\n",i);
scanf("%s",nome_temp);
if (strcmp(nome_temp, "fine")==0) break;


strcpy(cont.cognome,nome_temp);
printf("Inserisci il nome del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.nome,nome_temp);
printf("Inserisci il numero del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.numero,nome_temp);
printf("Inserisci l'indirizzo del contatto n:%d\n",i);
scanf("%s",nome_temp);
strcpy(val.indirizzo,nome_temp);
printf("Inserisci l'indirizzo e-mail del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.email,nome_temp);
printf("Inserisci l'indirizzo di pagina web del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.web,nome_temp);

i++;
lista=Inserisci(lista,&cont,&val);

}break;
case 4:
printf("Ecco il contenuto della Rubrica del tuo smartphone\n");
Stampa(lista);
break;


case 5:
Elimina(lista);
break;
} system("CLS");
}while(scelta<6);
system("PAUSE");



return 0;
}
pettegola è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2011, 18:56   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
c++?

comunque se metti il codice tra i tag code così che rimanga l'indentazione lo leggo meglio, così è troppo incasinato

a occhio potresti aver sbagliato qui:

Codice:
if(strcmp(s->elemento.contenuto.cognome,elem.contenuto.cognome))
perché probabilmente volevi dire "se le due stringhe sono uguali", ma strcmp ritorna 0 se sono uguali, quindi avresti dovuto scrivere

Codice:
if(!strcmp(s->elemento.contenuto.cognome,elem.contenuto.cognome))
poi non capisco cosa fai nell'if successivo, dove c'è la strcpy
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2011, 19:27   #3
pettegola
Junior Member
 
Iscritto dal: Jan 2011
Messaggi: 3
Codice:
#include<stdio.h>
#include<iostream>
#include<stdlib.h>





#define MAXCHAR 20 

typedef
struct{
char cognome[MAXCHAR];
}inseriti;

typedef
struct{
char nome[MAXCHAR];
char numero[MAXCHAR];
char email[MAXCHAR];
char web[MAXCHAR];
char indirizzo[MAXCHAR];
}associati ;


typedef 
struct { 
inseriti contenuto;
associati valore;
}Contatto; 



struct Lista;
typedef struct Lista *PuntUnElementoDellaLista;



typedef struct Lista{
Contatto elemento;
PuntUnElementoDellaLista next;
}Lista;

Lista* Inserisci(PuntUnElementoDellaLista pl, inseriti *contenuto, associati *valore){
PuntUnElementoDellaLista pTmp;
pTmp=(PuntUnElementoDellaLista)malloc(sizeof(Lista));

if (NULL != pTmp){
pTmp->next=pl;
strcpy(pTmp->elemento.valore.nome,valore->nome);
strcpy(pTmp->elemento.contenuto.cognome,contenuto->cognome);
strcpy(pTmp->elemento.valore.numero,valore->numero);
strcpy(pTmp->elemento.valore.email,valore->email);
strcpy(pTmp->elemento.valore.indirizzo,valore->indirizzo);
strcpy(pTmp->elemento.valore.web,valore->web);

}
return(pTmp);


void Stampa(PuntUnElementoDellaLista pl){
PuntUnElementoDellaLista pTmp=pl;

while (pTmp!=NULL){

printf("\n Cognome:\n %s",pTmp->elemento.contenuto.cognome);
printf("\n Nome: \n %s,",pTmp->elemento.valore.nome);
printf("\n Numero: \n %s",pTmp->elemento.valore.numero);
printf("\n Indirizzo:\n %s",pTmp->elemento.valore.indirizzo);
printf("\n Indirizzo e-mail:\n %s",pTmp->elemento.valore.email);
printf("\n Indirizzo web:\n %s",pTmp->elemento.valore.web);
pTmp=pTmp->next;
}
system("PAUSE");

} 

void Elimina(PuntUnElementoDellaLista pl){

Contatto elem;
printf("Inserisci il cognome del contatto da eliminare");
scanf("%s",elem.contenuto.cognome);

PuntUnElementoDellaLista s,r;

if(pl->next!=NULL){
s=pl;
while(s->next!=NULL){
if(!strcmp(s->elemento.contenuto.cognome,elem.contenuto.cognome)){
r=s->next;
s->next=s->next->next;
free(r);
}
else s=s->next;
}
}
if(!strcmp(pl->elemento.contenuto.cognome,elem.contenuto.cognome)){
r=pl;
pl=pl->next;
free(r);
}
} 
int main(){
PuntUnElementoDellaLista lista; 
lista = NULL; 

int i=0,scelta; 
associati val;
inseriti cont;

do{ printf("Scegli una delle seguenti operazioni:\n");
printf("Digita 1 per Inserire i contatti nella rubrica\n");
printf("Digita 4 per visualizzare tutti i contatto in rubrica\n");
printf("Digita 5 per eliminare un elemento della rubrica\n");
scanf("%d",&scelta);
system("CLS");

switch(scelta){
case 1:


while (true){ 
char nome_temp[MAXCHAR]; 
printf("Inserisci il cognome dell'contatto (digita fine per terminare) n: %d\n",i); 
scanf("%s",nome_temp); 
if (strcmp(nome_temp, "fine")==0) break; 


strcpy(cont.cognome,nome_temp); 
printf("Inserisci il nome del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.nome,nome_temp);
printf("Inserisci il numero del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.numero,nome_temp);
printf("Inserisci l'indirizzo del contatto n:%d\n",i);
scanf("%s",nome_temp);
strcpy(val.indirizzo,nome_temp);
printf("Inserisci l'indirizzo e-mail del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.email,nome_temp);
printf("Inserisci l'indirizzo di pagina web del contatto n: %d\n",i);
scanf("%s",nome_temp);
strcpy(val.web,nome_temp);

i++;
lista=Inserisci(lista,&cont,&val);

}break;
case 4:
printf("Ecco il contenuto della Rubrica del tuo smartphone\n");
Stampa(lista); 
break; 


case 5:
Elimina(lista);
break;
} system("CLS");
}while(scelta<6);
system("PAUSE"); 



return 0; 
}


ke sciocca!!! nn volevo scrivere strcpy ma stcmp
cmq anke modifcato così...fa cose strane...cioè mi cancella tutti i contatti tranne il primo invece ne dovrebbe cancellà 1 solo!
pettegola è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2011, 19:58   #4
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
il fatto che non ti cancelli la testa della lista è normale, perché passando il puntatore al primo elemento non hai nessun controllo sul puntatore lista che hai nel main (che è il puntatore alla testa, e non viene modificato)

ovviamente tu devi poter cancellare anche il primo elemento e modificare la testa della lista se necessario, quindi devi cambiare il prototipo della funzione, hai due opzioni:

Codice:
PuntUnElementoDellaLista Elimina(PuntUnElementoDellaLista lista);
così invece di non ritornare niente ritorni la testa della nuova lista se è necessario modificarla, e quindi puoi chiamarla così:

Codice:
lista = Elimina(lista);
la seconda opzione invece è usare un puntatore a lista, per poterne modificare il valore, quindi il prototipo diventa:

Codice:
void Elimina(PuntUnElementoDellaLista *lista);
e puoi richiamare con

Codice:
Elimina(&lista);
e se necessario puoi eliminare il primo elemento della lista facendo, ad esempio:

Codice:
PuntUnElementoDellaLista tmp = *lista;
*lista = (*lista)->next
free(tmp);
inoltre ti faccio notare che nel while confronti il cognome dell'elemento s, verifichi che sia quello da eliminare, ma non elimini s, bensì s->next

comunque in realtà devi rivedere un po' tutta la struttura della funzione, usando una delle due opzioni che ti ho detto
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 04-01-2011, 21:49   #5
pettegola
Junior Member
 
Iscritto dal: Jan 2011
Messaggi: 3
ho corretto nel while ma non ho capito il resto che hai detto!

cioè mica posso mettere la variabile lista come parametro della funzione?? nn ho capito sto fatto....
pettegola è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Test in super anteprima di Navimow i220 LiDAR: il robot tagliaerba per tutti Test in super anteprima di Navimow i220 LiDAR: i...
Dark Perk Ergo e Sym provati tra wireless, software via browser e peso ridotto Dark Perk Ergo e Sym provati tra wireless, softw...
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
Elon Musk ora guarda alla Luna: SpaceX p...
La Cina ha lanciato nuovamente lo spazio...
Blue Origin potrebbe realizzare il lande...
Artemis II: il prossimo Wet Dress Rehear...
Il nuovo HONOR 600 sta arrivando e avr&a...
La crisi delle memorie non coinvolger&ag...
Windows domina su Steam, ma molti utenti...
Per non incorrere in nuovi aumenti delle...
Cubi Z AI 8M visto da vicino, un mini-PC...
Datacenter nello Spazio, affascinante ma...
Social e minori, Butti apre al dibattito...
Tutte le offerte Amazon del weekend, sol...
Amazon spinge sull'usato garantito: 10% ...
TikTok rischia una maxi-multa in Europa:...
Bose su Amazon: QuietComfort SC over ear...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:39.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v