|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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++;
}
So che è un problema banalissimo,ma non so proprio come risolverlo
|
|
|
|
|
|
#2 |
|
Senior Member
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 ;
}
}
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 ) ;
}
__________________
~Breve riferimento ai comandi GNU/Linux (ormai non molto breve...) |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Vicenza
Messaggi: 1570
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Senior Member
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;
}
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2007
Messaggi: 6287
|
Quote:
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). |
|
|
|
|
|
|
#6 |
|
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 ; |
|
|
|
|
|
#7 |
|
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 |
|
|
|
|
|
#8 |
|
Senior Member
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;
}
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 |
|
|
|
|
|
#9 |
|
Senior Member
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...) |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
|
Quote:
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
}
|
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Quote:
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2011
Città: Parma
Messaggi: 313
|
giusto,correggo subito
Codice:
if(points!=0 && increment==0 && points%6==0){
increment=1;
}
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:39.




















