Miért nem működik (megfelelően) ez a C++ program? (3) (forráskód lent)
// SquareDemo - demonstrate the use if a function
// which processes arguments
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
//square - returns the square of its argument
// doubleVar - the valuse to be squared
// returns - square of doubleVar
double square (double doubleVar)
{
return doubleVar * doubleVar ;
}
// sumSequence - accumlate the square of the number
// entered at the keyboard into a sequence
// until the user enter a negative number
double sumSequence(void)
{
// loop forever
double accumlator = 0.0;
for(;;)
{
// fetch another number
double dValue = 0;
cout << "Enter next number: ";
cin >> dValue;
// if it's negative...
if(dValue < 0);
{
// ... then exit from loop
break;
}
// ... otherwise calculate the square to the
double value = square(dValue);
// now add the square to the accumlator
//accumlator
accumlator = accumlator + value;
}
//return the accumlated value
return accumlator;
}
int main (int nNumberofArgs, char*)
{
cout << "This program sums multiple series/n"
<< "of numbers squared.Terminate each sequance/n"
<< "by entering a negative number. /n"
<< "Terminate the series by entering two/n"
<< endl ;
// Continue to accumulate numbers...
double accumulatedValue;
for(;;)
{
// sum a sequence of numbers entered from
// the keyboard
cout << "Enter the next sequence: " << endl;
if (accumulatedValue <= 0.0)
{
break;
}
// now output the accumulated result
cout << "/n The total of the values squared is "
<< accumulatedValue
<< endl ;
}
cout << "Thank you" << endl;
//wait until user is ready before terminating program
// to allow the user to see the program results
system("PAUSE");
return 0;
}
Ez egy "egyszerű" C++ program lenne, amit egy könyvből "másoltam" ki, de úgy tűnik, hogy valamit nagyon benéztem, viszont arra már nem tudok rájönni, hogy mit. Lett belőle egy jó kis infinite cout.
Előre is köszi minden helpet :)
double accumulatedValue;
Elfelejtetted definiálni valami kezdőértékre, ez nagy probléma, a C++-ban egy jó szokás, hogy a deklaráció helyén azonnal definiáld, így nem felejted el.
A for ciklusban semmit nem változtatsz az értékén, ami a végtelen ciklust eredményezi.
A függvényeket nem hívod meg (pedig gondolom arra is szükség lenne, ha már egyszer ide bemásoltad)
Bár így látatlanba, mert nem tudom mit kéne csinálni a programnak, annyira nem néztem át, feltételezem ez a sor utána:
cout << "Enter the next sequence: " << endl;
Meg kéne hívni a sumSequence() függvényt, és a visszatérési értékét az accumulatedValue-ba kéne tenni.
És még két észrevétel:
Nem jó a main paramétereinek típusa, char**-nak kéne lenni, nem char*-nak
A 29-es sorban:
if(dValue < 0);
Van egy pontosvessző az if után, ezért fog értéktől függetlenül a ciklus megszakadni.
És mint mondtam, az 59-es sor után szúrd be:
accumulatedValue=sumSequence();
Ezután egy negatív számmal tudsz kilépni a programból.
Nálam, holott csak azokat a változtatásokat hajtottam végre, amit írtam (+ a system("PAUSE")-t kivettem, mert ez csak Windows-on/DOS-on működik), nem okozott végtelen ciklust.
Melyik részben történik ez, a függvényben, vagy a főprogramban, nem változtattál semmit a kódon azon kívül, amiket írtam? Ha igen, akkor esetleg bemásolhatnád, most hogy néz ki a kódod.
Azt hiszem, hogy mindent megcsináltam, amit mondtál, de ha mégse, akkor az szándékomon kívül történt. A program jelenleg így néz ki:
// SquareDemo - demonstrate the use if a function
// which processes arguments
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
//square - returns the square of its argument
// doubleVar - the valuse to be squared
// returns - square of doubleVar
double square (double doubleVar)
{
return doubleVar * doubleVar ;
}
// sumSequence - accumlate the square of the number
// entered at the keyboard into a sequence
// until the user enter a negative number
double sumSequence(void)
{
// loop forever
double accumlator = 0.0;
for(;;)
{
// fetch another number
double dValue = 0;
cout << "Enter next number: ";
cin >> dValue;
// if it's negative...
if(dValue < 0)
{
// ... then exit from loop
break;
}
// ... otherwise calculate the square to the
double value = square(dValue);
// now add the square to the accumlator
//accumlator
accumlator = accumlator + value;
}
//return the accumlated value
return accumlator;
}
int main (int nNumberofArgs, char*)
{
cout << "This program sums multiple series/n"
<< "of numbers squared.Terminate each sequance/n"
<< "by entering a negative number. /n"
<< "Terminate the series by entering two/n"
<< endl ;
// Continue to accumulate numbers...
double accumulatedValue;
accumulatedValue=sumSequence();
for(;;)
{
// sum a sequence of numbers entered from
// the keyboard
cout << "Enter the next sequence: " << endl;
if (accumulatedValue <= 0.0)
{
break;
}
// now output the accumulated result
cout <<"\nThe total of the values squared is "
<< accumulatedValue
<< endl ;
}
cout << "Thank you" << endl;
//wait until user is ready before terminating program
// to allow the user to see the program results
system("PAUSE");
return 0;
}
Rossz helyre tetted ezt a sort:
accumulatedValue=sumSequence();
Ez a kiírás után tedd, ez után:
cout << "Enter the next sequence: " << endl;
De mindenképpen a cikluson belülre, különben az accumulatedValue érték sohasem fog változni, emiatt sohasem fog a program a ciklusból kiugrani.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!