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-04-2012, 20:46   #1
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
[C/C++]Incrementare variabile una sola volta

Come al solito,ho ancora un banalissimo problema

Voglio incrementare una variabile una sola volta ad una condizione,come nell'esempio:
Codice:
if(points>=5){
lifes++;
}
L'unico problema è che la variabile aumenta,aumenta e aumenta all'infinito,ma io voglio incrementarlo solo una volta!

So che è un problema banalissimo,ma non so proprio come risolverlo

MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2012, 21:10   #2
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Non avendo la minima idea della struttura del programma, con una (potenzialmente fastidiosa) variabile globale?
Codice:
bool bBonusLife = false ;

main()
{

    if(! bBonusLife && points>=5){
        bBonusLife = true ;
        lifes++;
    }

}
Codice:
int nBonusLifes = 1 ;

main()
{

    if(nBonusLives > 0 && points>=5){
        ++ lifes ;
        -- nBonusLifes ;
    }

}
Con una static in una funzione?
Codice:
void UpdateLifes( int &nLives, const long nPoints )
{
    static int nBonusLifes = 1 ;
    if(nBonusLives > 0 && nPoints >= 5){
        ++ nLives ;
        -- nBonusLifes ;
    }
}

main()
{
    int lives = 3 ;
    long points = 0 ;


    UpdateLifes( lifes, points ) ;

}
Con un'apposita variabile se è un oggetto?
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 14-04-2012, 21:33   #3
[Kendall]
Senior Member
 
L'Avatar di [Kendall]
 
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
Quote:
Originariamente inviato da MissaW_RaZ_98 Guarda i messaggi
Come al solito,ho ancora un banalissimo problema

Voglio incrementare una variabile una sola volta ad una condizione,come nell'esempio:
Codice:
if(points>=5){
lifes++;
}
L'unico problema è che la variabile aumenta,aumenta e aumenta all'infinito,ma io voglio incrementarlo solo una volta!

So che è un problema banalissimo,ma non so proprio come risolverlo

Decisamente devi postarci il codice del tuo programma. Soprattutto bisogna capire cosa sia quel points e in che maniera viene assengato. Oltre a questo, è impossibile che lifes venga incrementato all'infinito se non è all'interno di un loop (cosa che non traspare dal tuo esempio). Quindi, si torna al consiglio iniziale: postaci il codice intero del programma, o per lo meno quello del metodo/funzione in questione
[Kendall] è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 17:42   #4
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
si,scusate ragazzi,ora vi posto tutto il codice
Codice:
#include <stdio.h>
#include <iostream>

int main(){
int lifes=3;
int points=0;

while(1){
.....qui tutto il giochino (non credo che serva molto per aiutarmi)

if(points==5){
lifes++;
}//E qui il problema:la variabile incrementa all'infinito

}

return 0;
}
quindi si,è all'interno di un loop...
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 18:01   #5
LMCH
Senior Member
 
Iscritto dal: Jan 2007
Messaggi: 6329
Quote:
Originariamente inviato da MissaW_RaZ_98 Guarda i messaggi
si,scusate ragazzi,ora vi posto tutto il codice
Codice:
#include <stdio.h>
#include <iostream>

int main(){
int lifes=3;
int points=0;

while(1){
.....qui tutto il giochino (non credo che serva molto per aiutarmi)

if(points==5){
lifes++;
}//E qui il problema:la variabile incrementa all'infinito

}

return 0;
}
quindi si,è all'interno di un loop...
Come hanno già postato gli altri, nel caso generale ti serve una variabile di appoggio per sapere se hai già aggiornato la variabile.

Se invece il loop viene eseguito una sola volta durante l'esecuzione del programma e durante il loop points vale 5 in un solo ciclo di loop, allora potresti fare a meno della variabile di appoggio, ma come dicevo prima in linea generale è meglio usarla (così se fai modifiche successive e ti dimentichi di quel vincolo "una sola volta", non rischi che l'errore rispunti fuori).
LMCH è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 18:03   #6
lorenzo001
Senior Member
 
Iscritto dal: Jul 2008
Città: Roma
Messaggi: 542
E quindi ?

Utilizza il suggerimento che ti è stato dato, no?

Ad esempio quello della variabile

bool bBonusLife = false ;
lorenzo001 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 18:07   #7
nico159
Senior Member
 
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
if(points==5 && lifes == 0) lifes++;?
__________________
In a world without fences, who needs Gates?
Power by: Fedora 8 - Mac OS X 10.4.11
nico159 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 18:10   #8
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
ok...dato che uso il loop infinito(while),dovrò creare un'altra variabile "d'appoggio",che ferma il programma subito dopo che ho incrementato la variabile.
Quindi il codice dovrebbe essere così?
Codice:
#include <stdio.h>
#include <iostream>

int main(){
int lifes=3;
int points=0;

int increment==1;//questa è la variabile d'appoggio

while(1){
.....qui tutto il giochino (non credo che serva molto per aiutarmi)

if(points==5 && increment==1){
lifes++;
increment=0; 
}

}

return 0;
}
Ma ho un'altra domanda....
Vorrei anche che ogni 5 punti in più aumento la vita di uno...ma per fare questo devo cambiare in qualche modo la variabile increment in modo che diventi 0,poi 1,poi 0,etc.

Come faccio?

grazie per le risposte
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 19:43   #9
Gimli[2BV!2B]
Senior Member
 
L'Avatar di Gimli[2BV!2B]
 
Iscritto dal: Feb 2006
Città: Parma
Messaggi: 3010
Se i punti sono compresi tra 0 e 5 puoi reincrementare il bonus dove azzeri i punti.

Se vanno da zero a MAX_INT ed il punteggio non può diminuire, puoi usare opportunamente l'operatore modulo (%) per sostituire il test di uguaglianza (==), in modo tale da rendere il test valido per ogni scatto di cinque.
Puoi quindi usarlo anche quando il punteggio è divisibile per sei per reincrementare il bonus, in previsione del successivo raggiungimento di un punteggio divisibile per cinque.
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...)
Gimli[2BV!2B] è offline   Rispondi citando il messaggio o parte di esso
Old 15-04-2012, 20:59   #10
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
Quote:
Originariamente inviato da Gimli[2BV!2B] Guarda i messaggi
Se i punti sono compresi tra 0 e 5 puoi reincrementare il bonus dove azzeri i punti.

Se vanno da zero a MAX_INT ed il punteggio non può diminuire, puoi usare opportunamente l'operatore modulo (%) per sostituire il test di uguaglianza (==), in modo tale da rendere il test valido per ogni scatto di cinque.
Puoi quindi usarlo anche quando il punteggio è divisibile per sei per reincrementare il bonus, in previsione del successivo raggiungimento di un punteggio divisibile per cinque.
grande! non ci avevo proprio pensato!
Ora va alla grande!

A chi servisse,ecco il codice:
Codice:
while(1){
.....

if(increment==1 && points%5==0){
lifes++;
increment=0;
}

if(increment==0 && points%6==0){
increment=1;
}//questo serve per utilizzare il bonus in caso che i punti siano multipli di 5

}
grazie grazie a tutti
MissaW_RaZ_98 è offline   Rispondi citando il messaggio o parte di esso
Old 17-04-2012, 23:46   #11
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da MissaW_RaZ_98 Guarda i messaggi
grande! non ci avevo proprio pensato!
Ora va alla grande!

A chi servisse,ecco il codice:
Codice:
while(1){
.....

if(increment==1 && points%5==0){
lifes++;
increment=0;
}

if(increment==0 && points%6==0){
increment=1;
}//questo serve per utilizzare il bonus in caso che i punti siano multipli di 5

}
grazie grazie a tutti
Scusa ma così il programma fa lifes++ anche se points == 0.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 18-04-2012, 19:53   #12
MissaW_RaZ_98
Senior Member
 
L'Avatar di MissaW_RaZ_98
 
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
giusto,correggo subito

Codice:
if(points!=0 && increment==0 && points%6==0){
increment=1;
}
Grazie per la segnalazione
MissaW_RaZ_98 è 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...
DOOGEE T10 Pro, il miglior tablet di tut...
Il miglior deumidificatore su Amazon sce...
Prosegue lo sviluppo del telescopio spaz...
28 astronauti cinesi hanno condotto un'e...
Dal Padiglione Italia al mercato globale...
POCO M8: display AMOLED luminoso, batter...
ECOVACS, tante novità a Las Vegas...
Caso Galaxy Ring difettoso: Samsung chiu...
Targa e assicurazione per monopattini el...
AI Cloud Protect: la soluzione di Check ...
Nuovo spettacolare video del razzo spazi...
Hisense presenta a CES 2026 il display M...
XPeng P7+ è pronta per l'Europa: ...
IKEA nuove lampade Matter annunciate al ...
Il telescopio Hubble potrebbe andare dis...
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: 07:56.


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