Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-12-2009, 22:26   #1
ciccionamente90
Senior Member
 
L'Avatar di ciccionamente90
 
Iscritto dal: Apr 2008
Città: MilanoMilano Compravendite: 17
Messaggi: 3564
[C] Problema: la procedura non cambia la variabile

Innanzitutto vi metto il programma completo se volete vederlo:

Codice:
#include <stdio.h>
#define MAX_LUNG_STRING 100
#define MAX_AR 100

//procedure
void inserimento(int nAR);
void visualizza(int nAR);
void rimuovi(int nAR);
void leggi(int nAR);

//Variabili e strutture
  char temp='Z';
  int nAR=0;
  
//Data di pubblicazione: ordinamento date
  typedef struct {
    int giorno;
    int mese;
    int anno;
  } tipo_data;

//Ultimo typedef (struct: articolo)
  typedef struct {
    char titolo[MAX_LUNG_STRING];
    char autore[MAX_LUNG_STRING];
    char giornale[MAX_LUNG_STRING];
    char pagina[MAX_LUNG_STRING];
    tipo_data data;
    unsigned giudizio;
    char argomento[MAX_LUNG_STRING];
    char note[MAX_LUNG_STRING];
  } articolo;

articolo archivio[MAX_AR];

main(){

//Programma
  
  while(temp!='Q'&&temp!='q'){
    printf("----------------------------------------\n[i] = Inserire un nuovo articolo\n[L] = Leggere un articolo\n[R] = Rimuovere un articolo\n[V] = Consulta la lista\n[Q] = Chiudi\n----------------------------------------\n");
    scanf("%c*%c", &temp);
    
    switch(temp){
  //codice nel caso in cui "temp" valga "I" o "i"
      case 'I':{
	inserimento(nAR);
        nAR++;
	break;
      }  
      case 'i':{
	inserimento(nAR);
        nAR++;
	break;
      }
            
  //codice nel caso in cui "temp" valga "R" o "r"
      case 'R':{
	rimuovi(nAR);
	break;
      }
      case 'r':{
	rimuovi(nAR);
	break;
      }
      
  //codice nel caso in cui "temp" valga "R" o "r"
      case 'L':{
	leggi(nAR);
	break;
      }
      case 'l':{
	leggi(nAR);
	break;
      }
      
  //codice nel caso in cui "temp" valga "V"
      case 'V':{
	visualizza(nAR);
	break;
      }
      case 'v':{
	visualizza(nAR);
	break;
      }    
      
  ////
      default:
      {
	//Qualsiasi altro caso
	break;
      }
    }
  }

  
}

//VISUALIZZA LISTA
void visualizza(int nAR){
  printf("(%d) Lista articoli:\n",nAR);
  printf("|---------------------------------------------------------------------------|\n");
  printf("Nr. \t Titolo \t Autore \t Giornale \n");
  printf("|---------------------------------------------------------------------------|\n");
  printf(">nAR: %d<\n",nAR);
  
  int i=0;
  for(i=0;i<nAR;i++){
    printf("n.%d \t %s \t %s \t %s\n",(i),archivio[i].titolo,archivio[i].autore,archivio[i].giornale);
  }
  
  printf("|---------------------------------------------------------------------------|\n");
}

//INSERIMENTO
void inserimento(int nAR){
  printf("\n(%d)Inserire titolo (max %d caratteri, senza spazi): ",nAR, MAX_LUNG_STRING);
  scanf("%s", &archivio[nAR].titolo);
  printf("\n(%d)Inserire autore (max %d caratteri, senza spazi): ",nAR,  MAX_LUNG_STRING);
  scanf("%s", &archivio[nAR].autore);
  printf("\n(%d)Inserire giornale (max %d caratteri, senza spazi): ",nAR,  MAX_LUNG_STRING);
  scanf("%s", &archivio[nAR].giornale);
  printf("\n(%d)Inserire pagina/e del giornale (in cui si irova l'articolo): ",nAR);
  scanf("%s", &archivio[nAR].pagina);
  printf("\n(%d)Inserire giorno: ",nAR);
  scanf("%d", &archivio[nAR].data.giorno);
  printf("\n(%d)Inserire mese: ",nAR);
  scanf("%d", &archivio[nAR].data.mese);
  printf("\n(%d)Inserire anno: ",nAR);
  scanf("%d", &archivio[nAR].data.anno);
  printf("\n(%d)Inserisci un giudizio (da 1 a 10): ",nAR);
  scanf("%u",&archivio[nAR].giudizio);
  printf("\n(%d)Inserisci gli argomenti trattati (max %d caratteri, senza spazi): ",nAR,  MAX_LUNG_STRING);
  scanf("%s", &archivio[nAR].argomento);
  printf("\n(%d)Note (max %d caratteri, senza spazi): ",nAR,  MAX_LUNG_STRING);
  scanf("%s", &archivio[nAR].note);
  }


//LETTURA
void leggi(int nAR){
  
  //visualizzazione lista inseriti +init
  visualizza(nAR);
  int index=0;
  
  //inserimento indice dell'articolo da stampare
  printf("\nInserisci il numero dell'articolo da visualizzare: ");
  scanf("%d", &index);
  
  //stampa
  printf("\n>> Articolo numero %d\n", index);
  printf("Titolo: %s\n",archivio[index].titolo);
  printf("Autore: %s\n",archivio[index].autore);
  printf("Giornale: %s\n",archivio[index].giornale);
  printf("Pagina/e: %d\n", archivio[index].pagina);
  printf("Data: %d/%d/%d\n", archivio[index].data.giorno, archivio[index].data.mese, archivio[index].data.anno);
  printf("Giudizio: %d/10\n", archivio[index].giudizio);
  printf("Arggomento/i: %s\n",archivio[index].argomento);
  printf("Note: %s\n",archivio[index].titolo);
}

//RIMOZIONE
void rimuovi(int nAR){

  //visualizzazione lista inseriti +init
  visualizza(nAR);
  int index=0;
  int x=0;

  //inserimento indice dell'articolo da azzerare
  printf("(%d) Inserire il numero identificativo dell'articolo da rimuovere:\n",nAR);
  scanf("%d", &index);
 
  //azzeramento
  archivio[index].titolo[0] ='\0';
  archivio[index].autore[0] ='\0';
  archivio[index].giornale[0] ='\0';
  archivio[index].pagina[0] ='\0';
  archivio[index].data.giorno =0;
  archivio[index].data.mese =0;
  archivio[index].data.anno =0;
  archivio[index].giudizio =0;
  archivio[index].argomento[0]='\0';
  archivio[index].note[0]='\0';

  for(x=0;x<MAX_AR;x++){
    if(archivio[x].titolo[0] =='\0'){
      archivio[x]=archivio[x+1];
      archivio[x+1].titolo[0] ='\0';
      archivio[x+1].autore[0] ='\0';
      archivio[x+1].giornale[0] ='\0';
      archivio[x+1].pagina[0] ='\0';
      archivio[x+1].data.giorno =0;
      archivio[x+1].data.mese =0;
      archivio[x+1].data.anno =0;
      archivio[x+1].giudizio =0;
      archivio[x+1].argomento[0]='\0';
      archivio[x+1].note[0]='\0';
      nAR--;
      }
  }
}
Qui invece metto solo la parte utile per la comprensione del mio quesito:
Codice:
#include <stdio.h>
#define MAX_LUNG_STRING 100
#define MAX_AR 100

//procedure
...
void rimuovi(int nAR);


//Variabili e strutture
  char temp='Z';
  int nAR=0;
  
//Data di pubblicazione: ordinamento date
...

//Ultimo typedef (struct: articolo)
  typedef struct {
    char titolo[MAX_LUNG_STRING];
    char autore[MAX_LUNG_STRING];
    char giornale[MAX_LUNG_STRING];
    char pagina[MAX_LUNG_STRING];
    tipo_data data;
    unsigned giudizio;
    char argomento[MAX_LUNG_STRING];
    char note[MAX_LUNG_STRING];
  } articolo;

articolo archivio[MAX_AR];

main(){...qui si "attiva" (tra le altre) la procedura di rimozione...}

//RIMOZIONE
void rimuovi(int nAR){

  //visualizzazione lista inseriti +init
  visualizza(nAR);
  int index=0;
  int x=0;

  //inserimento indice dell'articolo da azzerare
  printf("(%d) Inserire il numero identificativo dell'articolo da rimuovere:\n",nAR);
  scanf("%d", &index);
 
  //azzeramento
  archivio[index].titolo[0] ='\0';
  archivio[index].autore[0] ='\0';
  archivio[index].giornale[0] ='\0';
  archivio[index].pagina[0] ='\0';
  archivio[index].data.giorno =0;
  archivio[index].data.mese =0;
  archivio[index].data.anno =0;
  archivio[index].giudizio =0;
  archivio[index].argomento[0]='\0';
  archivio[index].note[0]='\0';

  for(x=0;x<MAX_AR;x++){
    if(archivio[x].titolo[0] =='\0'){
      archivio[x]=archivio[x+1];
      archivio[x+1].titolo[0] ='\0';
      archivio[x+1].autore[0] ='\0';
      archivio[x+1].giornale[0] ='\0';
      archivio[x+1].pagina[0] ='\0';
      archivio[x+1].data.giorno =0;
      archivio[x+1].data.mese =0;
      archivio[x+1].data.anno =0;
      archivio[x+1].giudizio =0;
      archivio[x+1].argomento[0]='\0';
      archivio[x+1].note[0]='\0';
      nAR--;
      }
  }
}
Se avete dato un'occhiata alla versione completa avrete notato che è un programma per la creazione di archivi. Il programma funziona, ma nella procedura di rimozione ho aggiunto questa parte:
Codice:
  for(x=0;x<MAX_AR;x++){
    if(archivio[x].titolo[0] =='\0'){
      archivio[x]=archivio[x+1];
      archivio[x+1].titolo[0] ='\0';
      archivio[x+1].autore[0] ='\0';
      archivio[x+1].giornale[0] ='\0';
      archivio[x+1].pagina[0] ='\0';
      archivio[x+1].data.giorno =0;
      archivio[x+1].data.mese =0;
      archivio[x+1].data.anno =0;
      archivio[x+1].giudizio =0;
      archivio[x+1].argomento[0]='\0';
      archivio[x+1].note[0]='\0';
      nAR--;
questo dovrebbe servire per farl "slittare" le posizioni degli articoli all'indietro quando un articolo dell'archivio viene rimosso. Questo lo fa vedendo se il titolo è presente (se è vuoto procede con la sovrascrittura, svuotando quello successivo che si comporta ugualmente con quello dopo ancora e così via). L'unico problema è che quel nAR--; non funziona!!! Non so perché, ma non va a scalare il numero su cui va a riferirsi l'array.

Quindi vi chiedo, come faccio a far funzionare quel nAR--? Non funziona neppure mettendo nAR=nAR-1... come vedrete la variabile è stata dichiarata fuori dal main... mah...

Chiedete pure
__________________
CASE Cooler Master HAF-X & Mod LianLi HYDRO Corsair H100 PSU Corsair AX850W MB ASRock Z170 EXTREME 4
CPU i7 6700K VGA MSI GTX 1080 GAMING X RAM DDR3 2x8GB HyperX SSD OCZ Revodrive 80GB
HDD RAID0 WD CB 1Tb DLP Optoma GT720 VR Oculus Rift MISCELLANEOUS 3D Vision 2 + Asus Xonar D2X + Sennheiser
ciccionamente90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 00:06   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Ciao, nAR non lo stai usando per indicizzare l'array (almeno così mi sembra) e in ogni caso è il parametro della funzione, quindi anche se ne hai dichiarato un altro fuori quest'ultimo non verrà preso in considerazione.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 00:13   #3
ciccionamente90
Senior Member
 
L'Avatar di ciccionamente90
 
Iscritto dal: Apr 2008
Città: MilanoMilano Compravendite: 17
Messaggi: 3564
ciao, grazie!
nAR indica la posizione del successivo articolo che si andrà ad inserire, per questo quando viene inserito un nuovo articolo, alla fine nAR si incrementa di uno. Quando "scalo" gli articoli (e quindi l'ultimo rimane vuoto) anche nAR dovrebbe decrementarsi di uno (così che il successivo articolo vada nel primo spazio vuoto, ovvero l'ultimo "scalato").

Non capisco cosa intendi dire quando dici che se ne ho dichiarato un'altro fuori, questo non verrà preso in considerazione...
__________________
CASE Cooler Master HAF-X & Mod LianLi HYDRO Corsair H100 PSU Corsair AX850W MB ASRock Z170 EXTREME 4
CPU i7 6700K VGA MSI GTX 1080 GAMING X RAM DDR3 2x8GB HyperX SSD OCZ Revodrive 80GB
HDD RAID0 WD CB 1Tb DLP Optoma GT720 VR Oculus Rift MISCELLANEOUS 3D Vision 2 + Asus Xonar D2X + Sennheiser
ciccionamente90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 00:21   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Perché sei in una situazione di questo tipo:

Codice:
int var;

int main(){
  var=0;
  myFunc(12); //12 è un numero qualunque
  printf("%d\n",var); //stamperà 0
}

void myFunc(int var){
  var=1;
}
in myFunc il var cui viene assegnato 1 non è quello dichiarato prima del main ma è il parametro della funzione.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 00:28   #5
ciccionamente90
Senior Member
 
L'Avatar di ciccionamente90
 
Iscritto dal: Apr 2008
Città: MilanoMilano Compravendite: 17
Messaggi: 3564
ma io la variabile l'ho posta uguale a 0 fuori da ogni funzione: viene prima del main...

EDIT: forse ho capito cosa intendi, magari devo fare int var=0 (o int nAR=0) all'interno del main...
__________________
CASE Cooler Master HAF-X & Mod LianLi HYDRO Corsair H100 PSU Corsair AX850W MB ASRock Z170 EXTREME 4
CPU i7 6700K VGA MSI GTX 1080 GAMING X RAM DDR3 2x8GB HyperX SSD OCZ Revodrive 80GB
HDD RAID0 WD CB 1Tb DLP Optoma GT720 VR Oculus Rift MISCELLANEOUS 3D Vision 2 + Asus Xonar D2X + Sennheiser

Ultima modifica di ciccionamente90 : 15-12-2009 alle 00:32.
ciccionamente90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 00:32   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Quote:
Originariamente inviato da ciccionamente90 Guarda i messaggi
ma io la variabile l'ho posta uguale a 0 fuori da ogni funzione: viene prima del main...
Il punto non è questo, è che la funzione rimuovi l'hai dichiarata così:
Codice:
void rimuovi(int nAR){
   ...
}
Quindi ogni riferimento che fai alla variabile nAR all'interno di rimuovi è un riferimento al parametro che ti ho evidenziato, e non alla variabile nAR che hai dichiarato prima del main
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 00:36   #7
ciccionamente90
Senior Member
 
L'Avatar di ciccionamente90
 
Iscritto dal: Apr 2008
Città: MilanoMilano Compravendite: 17
Messaggi: 3564
ah, io credevo che lavorasse con lo stesso nAR... quindi come faccio a fargli modificare la variabile nAR che si trova fuori? Lascio le parentesi vuote?
__________________
CASE Cooler Master HAF-X & Mod LianLi HYDRO Corsair H100 PSU Corsair AX850W MB ASRock Z170 EXTREME 4
CPU i7 6700K VGA MSI GTX 1080 GAMING X RAM DDR3 2x8GB HyperX SSD OCZ Revodrive 80GB
HDD RAID0 WD CB 1Tb DLP Optoma GT720 VR Oculus Rift MISCELLANEOUS 3D Vision 2 + Asus Xonar D2X + Sennheiser
ciccionamente90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 01:05   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2782
Direi che è la soluzione più saggia, infatti non usi mai il valore passato come parametro (a parte per quel decremento che però tu vuoi si riferisca al nAR dichiarato fuori).
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 09:35   #9
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 21914
usa int &nAR al posto di int nAR

passaggio per riferimento invece che a valore
__________________
"WS" (p280,cx750m,4790k+212evo,z97pro,4x8GB ddr3 1600c11,GTX760-DC2OC,MZ-7TE500, WD20EFRX)
Desktop (three hundred,650gq,3800x+nh-u14s ,x570 arous elite,2x16GB ddr4 3200c16, rx5600xt pulse P5 1TB)+NB: Lenovo p53 i7-9750H,64GB DDR4,2x1TB SSD, T1000
!fazz è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 11:31   #10
ciccionamente90
Senior Member
 
L'Avatar di ciccionamente90
 
Iscritto dal: Apr 2008
Città: MilanoMilano Compravendite: 17
Messaggi: 3564
grazie, oggi provo e vi faccio sapere se funge
__________________
CASE Cooler Master HAF-X & Mod LianLi HYDRO Corsair H100 PSU Corsair AX850W MB ASRock Z170 EXTREME 4
CPU i7 6700K VGA MSI GTX 1080 GAMING X RAM DDR3 2x8GB HyperX SSD OCZ Revodrive 80GB
HDD RAID0 WD CB 1Tb DLP Optoma GT720 VR Oculus Rift MISCELLANEOUS 3D Vision 2 + Asus Xonar D2X + Sennheiser
ciccionamente90 è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2009, 13:41   #11
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Devi passare per indirizzo

int *nAR

Poi dopo devi sostituire *nAR dove utilizzi nAR.
Quando richiami la funzione devi passare l'indirizzo di nAR, cioè &nAR.
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Google Pixel 9a a 361€, mai così ...
Super sconti sugli spazzolini Oral-B, an...
Aspira a 6000Pa, lava bene, costa 139€: ...
Nuove scorte: torna il portatile tuttofa...
Toyota usa giochi e premi per spingere i...
HarmonyOS ha raggiunto la soglia di sopr...
Le offerte Amazon più convenienti...
Un gruppo di ladri ha usato Google Maps ...
Apple non si fida di Samsung per la real...
Windows 11: un nuovo driver nativo mette...
Vi hanno regalato buoni Amazon? Intanto ...
Via acari, polvere e sporco da materassi...
Cuffie Beats in super offerta su Amazon,...
Xbox Cloud Gaming arriva su Amazon Fire ...
Un blackout a San Francisco manda in til...
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: 08:17.


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