Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026
Sono molte le novità che ASUS ha scelto di presentare al CES 2026 di Las Vegas, partendo da una gamma di soluzioni NUC con varie opzioni di processore passando sino agli schermi gaming con tecnologia OLED. Il tutto senza dimenticare le periferiche di input della gamma ROG e le soluzioni legate alla connettività domestica
Le novità ASUS per il 2026 nel settore dei PC desktop
Le novità ASUS per il 2026 nel settore dei PC desktop
Molte le novità anticipate da ASUS per il 2026 al CES di Las Vegas: da schede madri per processori AMD Ryzen top di gamma a chassis e ventole, passando per i kit di raffreddamento all in one integrati sino a una nuova scheda video GeForce RTX 5090. In sottofondo il tema dell'intelligenza artificiale con una workstation molto potente per installazioni non in datacenter
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: 21933
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


Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Le novità MSI del 2026 per i videogiocatori Le novità MSI del 2026 per i videogiocato...
I nuovi schermi QD-OLED di quinta generazione di MSI, per i gamers I nuovi schermi QD-OLED di quinta generazione di...
Il nuovo Snapdragon 8 Elite Gen 6 sar&ag...
Nintendo Switch 2: risultati sotto le at...
Weekend con tante sorprese su Amazon: to...
HONOR non si ferma più: il 2025 &...
Speciale best seller: EUREKA J15 Evo Ult...
Roborock Q10 X5+ da 10.000 Pa a 199€ &eg...
E-mail reset password di Instagram: la c...
La NASA ha discusso le problematiche del...
Il razzo spaziale NASA SLS e la capsula ...
Stazione Spaziale Internazionale: Crew-1...
Samsung Galaxy S26 Ultra: la ricarica de...
Apple ha un nuovo partner per la sua App...
Trenitalia introduce il prezzo dinamico ...
OnePlus non si ferma più: c'&egra...
DAZN sconta il piano Full per 6 mesi, se...
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: 04:08.


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