Code voegt laatste def. Waarde niet toe

Ik schrijf een applicatie voor mijn intro naar programmeerles en het doel is om stel een eenvoudig programma in dat de gebruiker vraagt ​​een reeks positieve gehele getallen in te voeren tussen 50 en 100 (inclusief) met behulp van het toetsenbord. Uw prompt moet de gebruiker vertellen om een ​​negatief getal in te voeren om het invoerproces te stoppen.

Terwijl de gebruiker de nummers invoert, moet u het aantal geldige invoeren dat zij hebben gemaakt (die binnen het toegestane bereik vallen) bijhouden en die nummers invoeren. U hoeft niet meer op te slaan dan het enkele ingevoerde nummer, de telling en het huidige totaal dat u aan het berekenen bent.

Nadat de gebruiker de gegevensinvoer heeft voltooid, produceert u uitvoer als volgt:

A total of 5 values were entered.
The sum of those numbers is 127

maak een programma dat één variabele zal hebben en het zal de gebruikers ophalen

Hier is de code die ik heb geschreven

#include 
#include 

using namespace std;

int main(int argc, char *argv[]) {

int loop = 1;
int value;
int times = 0;

cout << "Enter a negavtive number to quit" << endl;
cout << "\nPlease Enter Any Number Between 50 - 100" << endl;

while (loop == 1) {      
cin >> value;
times++;
value += value;
  if(value < 0) {
    cout << "You entered " << times - 1 << " numbers" << endl;
    cout << "Total: " << value << endl;
    system("PUASE");
    return EXIT_SUCCESS;
    }// end if statement
} //end while loop

system("PAUSE");
return EXIT_SUCCESS;
}

Here is the output http://www.flickr.com/photos/[email protected]/6286454476/

Ik denk dat het misschien iets te maken heeft met het feit dat ik de int-waarde gebruik om twee verschillende taken uit te voeren. Hoe kan ik dit oplossen?

herziening

thanks to all of you for the "fix" I add a new variable and it works like a charm, but now the math is not adding correctly http://www.flickr.com/photos/[email protected]/6286526294/in/photostream

0
Een specifieke reden waarom u een int gebruikt in plaats van een boolean voor uw lus? Ook hebt u PAUSE verkeerd gespeld in uw lus.
toegevoegd de auteur Alex, de bron
Trouwens, ik ben geen C ++ dev maar er lijkt veel haat te zijn voor system() -oproepen. Redeneren wordt hier uitgelegd cplusplus.com/forum/articles/11153 en het maakt zeker zin voor mij om het te vermijden als je het kan helpen.
toegevoegd de auteur Alex, de bron

4 antwoord

Er zijn een paar problemen, maar de belangrijkste is dit:

cin >> value;

Dit betekent "overschrijf waarde met het nummer dat de gebruiker invoert", en als u dat doet, zult u nooit een som binnen de waarde kunnen opslaan omdat deze overschreven zal worden elke keer met het nieuwe nummer.

Oplossing: gebruik een andere variabele om het lopende totaal te behouden.

Je hebt ook een fout daarin

times++;
value += value;//which as described above will not "stick"

before checking if value is negative. These operations should only be performed when value is not negative; otherwise, data entry should stop immediately and the negative number should not be taken into account for summing the total.

3
toegevoegd

voeg een somvariabele toe om de som te houden, u overschrijft de invoerwaarde in elke lus-iteratie.

sum += value;
1
toegevoegd
dankzij jullie allemaal voor de "fix" voeg ik een nieuwe variabele toe en het werkt als een charme, maar nu wordt de wiskunde niet correct toegevoegd flickr.com/photos/[email protected]/6286526294/in/photostream
toegevoegd de auteur user975452, de bron

Gebruik value niet om twee verschillende taken uit te voeren.

Heb een andere variabele genaamd som en accumuleer het totaal daar.

De manier waarop u dingen doet, schrijft u over uw som elke keer dat de gebruiker een nummer invoert:

cin >> value;//sum of previous values is overwritten!

Ook is er een ander probleem dat wanneer de gebruiker een negatief getal invoert, dat ook aan de som wordt toegevoegd.

0
toegevoegd

Uw code controleert niet of de waarden binnen het bereik liggen (dat wil zeggen tussen 50 en 100). U kunt een voorwaarde op de regel plaatsen waarop u de toevoeging doet, zoals hieronder:

if (value >= 50 && value <= 100)
sun += value;

U kunt ook 'waarde' gebruiken om de lus ook te doorbreken.

0
toegevoegd
heel erg bedankt voor de heads-up van het programma wordt nu correct uitgevoerd. Het probleem was dat ik de variabele "som" als een geheel getal had opgegeven, terwijl het in werkelijkheid een dubbel was
toegevoegd de auteur user975452, de bron