Gå til innhold

Problemer med loop i konsollbasert C++ program


Anbefalte innlegg

#include <iostream>

#include <conio.h>

 

using namespace std;

 

int main()

{

int ammount = 0;

 

double percent;

double mainValue;

double value = 1800;

double count;

///////////////////

double testing = 50;

///////////////////

 

mainValue = value;

 

while ( mainValue =! 0 & mainValue > 180 )

{

while ( value != 0 & value >= 180 )

{

value = value - 180;

ammount = ammount + 1;

 

}

 

percent = ammount * 0.01;

count = testing * percent;

value = value + ( count * ( 180 * 0.6 ));

 

percent = 0;

count = 0;

 

mainValue = value;

}

 

 

cout << count << endl << ammount;

 

getch();

 

return 0;

 

}

 

 

 

Har en loop som starter med en valgfri verdi ( her 1800 ). Inne i loopen er det en ekstra loop som trekker fra 180 hver gang den kjører helt til det ikke er mer å trekke fra. Da skal den gi tilbake en verdi som er i den bolde delen av koden før den setter verdien som bestemmer om hovedloopen skal gå til det nye tallet den kommer fram til og dette skal den fortsette med til verdien blir for lav.

 

Problemet er at hver gang jeg setter variablene som heter testing til noe som er høy nok for at den skal kunne fortsette så henger programmet seg.

 

Muligens elendig forklart men håper noen kan hjelpe uansett. Får ingen feilmeldinger eller warnings i compileren.

Endret av Smeagoldfish
Lenke til kommentar
Videoannonse
Annonse

Jeg tror ikke jeg skjønte helt hva du mente, men her er et forsøk på et enkelt program som trekker fra en bestemt verdi (180) fra et bestemt tall (1800) og returnerer hvor mange ganger den trakk ifra og restverdien.

#include <iostream>
using namespace std;

int main()
{

int value = 1800;
int count = 0;

for ( ; value >= 180 ; value -= 180, count++ )
{
	cout << value << endl;
}

cout << "Rest: " << value << endl;
cout << "Teller: " << count << endl;

return 0;

}

Lenke til kommentar

du gjør det litt tumlete, for å finne ut hvor mange ganger du kan trekke 180 fra 1800 må du egentlig bare dividere 1800 på 180, så count er egentlig ubrukelig her.

for(int value = 1800; value >= 180; value -= 180)
 cout << value << endl;

cout << "Rest  : " << (1800 % 180) << endl;
cout << "Teller: " << (1800 / 180) << endl;

Lenke til kommentar
Problemet ditt her ser ut til å være at du bruker Bitwise And (&). Det du er ut etter er sikkert (&&) som betyr og.

 

Bare bytt om (&) med (&&) i uttrykkene til hver av while-løkkene dine så tipper jeg programmet ditt vil funke.

Det er fullt lovlig å skrive & i logiske uttrykk også. Det er da bare en ikke-shortcircuited and, så begge sider vil bli evaluert garantert.. samme med | og ||.

 

Eksempel:

 

(f(x) & g(x)) <- begge kjører alltid.

(f(x) && g(x)) <- g(x) kjøres bare hvis f(x) returerer true.

 

(f(x) | g(x)) <- begge kjører alltid.

(f(x) || g(x)) <- g(x) kjøres bare hvis f(x) returerer false.

Lenke til kommentar

Menneh, det er en viss forskjell på logisk og binær AND vel? slik trodde jeg det funket:

0010 & 0110 = 0010 = true

0010 && 0110 = 0000 = false

 

er ikke dette korrekt da?

 

edit: glem det, jeg tar feil

0010 && 0110 = 0010 = true, fordi true er alt annet en null og false er null.

Endret av GeirGrusom
Lenke til kommentar

Man bruker aldri && til bitwise and. Det brukes kun &, og den fungerer slik du beskriver. For logisk and, bruker man både & og &&, ettersom man vil ha short-circuited eller ikke.

 

Hvertfall _tror_ jeg det er slik, er ikke 100% sikker på alt her nå.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...