Kezdőoldal » Számítástechnika » Programozás » Miért nem működik (megfelelően...

Miért nem működik (megfelelően) ez a C++ program? (3) (forráskód lent)

Figyelt kérdés

// 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 :)


2011. jún. 11. 00:32
 1/10 anonim ***** válasza:
mert hiányos szerintem. ez csak egy keret progi nem?
2011. jún. 11. 00:39
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:
Sztem nem.
2011. jún. 11. 01:09
 3/10 anonim ***** válasza:

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.

2011. jún. 11. 08:58
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

É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.

2011. jún. 11. 09:27
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
Tök jó. Most már megy, csak akkor van baj, ha beütök egy negatív számot. Akkor ugyanúgy kijön egy végtelen ciklus :/
2011. jún. 12. 06:18
 6/10 A kérdező kommentje:
Egyébként nagyon köszönöm a választ, fel is pontoztam^^
2011. jún. 12. 06:18
 7/10 anonim ***** válasza:

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.

2011. jún. 12. 12:56
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

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;

}

2011. jún. 12. 16:25
 9/10 anonim ***** válasza:

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.

2011. jún. 12. 17:01
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:
Hú, végre működik. Nagyon köszi. Úgy tűnik, hogy még sokat kell tanulnom, mert még nem igazán látom át az egészet.
2011. jún. 12. 17:13

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!