Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio
POCO F9 Pro arriva sul mercato con l'obiettivo di portare prestazioni da smartphone top di gamma in una fascia di prezzo "più aggressiva", senza rinunciare a un comparto fotografico finalmente all'altezza. Dopo averlo testato sul campo, emerge uno smartphone molto più completo rispetto alla generazione precedente, ma anche con alcuni piccoli compromessi che diventano difficili da ignorare quando il prezzo di listino sfiora i 1.000 euro.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-12-2009, 21: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 14-12-2009, 23:06   #2
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
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 14-12-2009, 23: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 14-12-2009, 23:21   #4
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
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 14-12-2009, 23: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 : 14-12-2009 alle 23:32.
ciccionamente90 è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2009, 23:32   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
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 14-12-2009, 23: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, 00:05   #8
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
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, 08:35   #9
!fazz
Moderatore
 
L'Avatar di !fazz
 
Iscritto dal: Nov 2006
Messaggi: 22255
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, 10: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, 12: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


Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
HONOR pubblica The Sea Between Us, un co...
L'Olanda punta su NixOS e open source pe...
OPPO Find X10 Pro Max, il flagship con t...
Gli smartphone Samsung potrebbero avere ...
GeForce Now arriverà sui Googlebo...
Opus 5.5 e GPT-6 Sol nello stesso pomeri...
Weekend Amazon, le prime 5 offerte sono ...
Mini Compressore a 21,84€: gonfia le gom...
Gemini si aggiorna, ora può conne...
Da 32 a 65 pollici: ecco le TV più...
Xiaomi Redmi Note 17 a 269€: ecco perch&...
ASUS avverte i clienti: accesso non auto...
Già record di vendite su Amazon p...
Eni mette un tetto ai prezzi dei carbura...
BYD Seagull (Dolphin Surf), l'elettrica ...
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: 12:53.


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