Hur startar man om med while loop i C++?

Permalänk
Medlem

Hur startar man om med while loop i C++?

Tja

Är nybörjare på C++ och pysslar men en uppgift som går ut på att räkna ut volymen av en cylinder.
Man ska låta programmet skriva ut ett felmeddelande om man skriver in ett negativt tal.

Det är inga problem så långt. Men om jag sedan vill att programmet skall börja om efter felmeddelandet så att användaren får börja om hur gör jag då?

Vad jag vill är alltså att programmet skall göra följande:

Skriv ut "Mata in radien på cylindern i cm"
Mata in tal
MEDAN talet är <=0 SÅ
Skriv ut "Skriv in ett positivt tal för radien"

Mata in tal
Skriv ut "Mata in höjden på samma cyilnder i cm"
Mata in tal
Skriv ut "Cylinderns volym är: xxx cm3"

Kan man få till nåt i stil med nedan angivna:

Skriv ut "Mata in radien på cylindern i cm"
Mata in tal
MEDAN talet är <=0 SÅ
Skriv ut "Skriv in ett positivt tal för radien"

Mata in tal
ANNARS OM talet är >0 SÅ
Skriv ut "Mata in höjden på samma cyilnder i cm"
Mata in tal
Skriv ut "Cylinderns volym är: xxx cm3"

Permalänk
Inaktiv

Känns spontant enklare med en if loop.

Eller måste du använda en while loop?

Permalänk
Medlem

Detta känns som en skoluppgift eller dylikt så vill tyvärr inte ge för mycket hjälp.
Men ta en titt på while loop
http://www.tutorialspoint.com/cplusplus/cpp_while_loop.htm
och if-sats
http://www.tutorialspoint.com/cplusplus/cpp_if_else_statement...

Pasta din kod här så kan vi ge dig några riktlinjer om du därefter kör fast.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Som tidigare sagt så verkar det som att du vill använda en if istället, så att du ersätter det du skrivit som MEDAN med if.

Visa signatur

Citera så att jag hittar tillbaka! AMD Ryzen 7 5800X3D | MSI B450 Tomahawk Max | 32GB Ballistix @ 3733/16 | EVGA 2070 | Crucial MX500 2TB | EVGA G2 750W | Windows 10

Permalänk
Medlem
Skrivet av El_Raspberry:

Känns spontant enklare med en if loop.

Eller måste du använda en while loop?

Ja det ärä nog så ja, men så pass ny att jag inte ens vet vad för olika loopar det finns, bara att de finns. Så absolut inte låst till det ena eller det andra.

Skrivet av NoPaiN^:

Detta känns som en skoluppgift eller dylikt så vill tyvärr inte ge för mycket hjälp.
Men ta en titt på while loop
http://www.tutorialspoint.com/cplusplus/cpp_while_loop.htm
och if-sats
http://www.tutorialspoint.com/cplusplus/cpp_if_else_statement...

Pasta din kod här så kan vi ge dig några riktlinjer om du därefter kör fast.

Japp, man kan säga att det är en skolupggift, men inget som skall lämnas in eller liknande utan detta är en övning i att studera resultatet. Inget som jag "fuskar på" genom att fråga här. Däremot tacksam för hints och inte direkta svar om jag inte ber om just det eftersom jag då tvingas tänka lite själv och kanske lär mig bättre då.

Skrivet av Shrudder:

Som tidigare sagt så verkar det som att du vill använda en if istället, så att du ersätter det du skrivit som MEDAN med if.

Ska kika på era förslag, återkommer med kod oavsett om det funkar eller ej, alltid bra med input.

Nicke

Permalänk
Medlem
Skrivet av ApeviaX:

Tja

Är nybörjare på C++ och pysslar men en uppgift som går ut på att räkna ut volymen av en cylinder.
Man ska låta programmet skriva ut ett felmeddelande om man skriver in ett negativt tal.

Det är inga problem så långt. Men om jag sedan vill att programmet skall börja om efter felmeddelandet så att användaren får börja om hur gör jag då?

Vad jag vill är alltså att programmet skall göra följande:

Skriv ut "Mata in radien på cylindern i cm"
Mata in tal
MEDAN talet är <=0 SÅ
Skriv ut "Skriv in ett positivt tal för radien"

Mata in tal
Skriv ut "Mata in höjden på samma cyilnder i cm"
Mata in tal
Skriv ut "Cylinderns volym är: xxx cm3"

Kan man få till nåt i stil med nedan angivna:

Skriv ut "Mata in radien på cylindern i cm"
Mata in tal
MEDAN talet är <=0 SÅ
Skriv ut "Skriv in ett positivt tal för radien"

Mata in tal
ANNARS OM talet är >0 SÅ
Skriv ut "Mata in höjden på samma cyilnder i cm"
Mata in tal
Skriv ut "Cylinderns volym är: xxx cm3"

Skrivet av El_Raspberry:

Känns spontant enklare med en if loop.

Eller måste du använda en while loop?

Du behöver while-loopar: if-loopar finns inte.

Den ordagranna översättningen av "medan talet är ..." är tillochmed "while the number is ..."

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Du behöver while-loopar: if-loopar finns inte.

Den ordagranna översättningen av "medan talet är ..." är tillochmed "while the number is ..."

Okej, så while är en loop men det finns inte if loopar alls?
Nedan är nya resultatet, screenshots på vad som sker samt kod och funderingar på hur jag ska göra nu?

Skriv ut "Mata in radien på cylindern i cm"
Mata in tal
MEDAN talet är <=0 SÅ
Skriv ut "Skriv in ett positivt tal för radien"

Mata in tal
ANNARS OM talet är >0 SÅ <---------------------------- detta val kommer alltså ej att bli presenterat... Se bifogad bild...
Skriv ut "Mata in höjden på samma cyilnder i cm"
Mata in tal
Skriv ut "Cylinderns volym är: xxx cm3"

#include<iostream> #include<conio.h> using namespace std; int main () { cout << "Detta program beräknar en cylinders volym i cm3.\nTryck ENTER och följ anvisningarna på skärmen" << endl; cin.get (); cout << "\nAnge radien på basen av en cylinder i cm." << endl; double radie; double hight; cin>>radie; while (radie<=0){ cout << "\nAnge ett positivt tal för radien" << endl; break; } cout << "\nAnge höjden på samma cylinder i cm." << endl; cin>>hight; cout << "\nCylinderns volym: "<< 3.14159265359*radie*radie*hight <<" cm3"<< endl; getch(); return 0; }

Första screenshoten visar ett korrekt utförande där endast positiva tal är inmatade, den andra screenshoten visar på hur det blir fel när man först anger negativt tal och while loppen INTE startar om så som jag önskar, utan presenterar 2 alternativt och räknar på nåt vänster....

Något tips om vad jag bör addera o koden för att få programmet att "starta" om efter det att man blir ombedd att mata in ett positivt tal?

Lyckas inte lägga in bilder?
Gällande koden, jag vet att inga kommentarer är inlagda, men ignorera gärna det för stunden.

Permalänk
Medlem

Testa ta bort "break".
Läs gärna på hur/när det kan vara bra med en break.

Sen lägg din cin etc inne i while-loopen.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Cin>>radie; är när du vill att användaren ska skriva in ett värde.

Om han skriver "fel" värde kommer felmeddelandet
Ny koll görs igen på värdet
Felmeddelande visas
Ny koll på värdet
Felmeddelande visas

Ser du mönstret?
Och vad som saknas?
Du ger aldrig användaren en chans att rätta till sitt värde.

Var ganska längesen jag använde C++ så det kan hända att jag läst koden fel

Permalänk
Medlem
Skrivet av NoPaiN^:

Testa ta bort "break".
Läs gärna på hur/när det kan vara bra med en break.

Sen lägg din cin etc inne i while-loopen.

Ja break kändes fel, men fick ju inte loopen att stanna annars
Fatta först inte hur jag ska få in cin etc i while loopen, men... nu funkar det i anser jag...

Skrivet av Agonotheta:

Cin>>radie; är när du vill att användaren ska skriva in ett värde.

Om han skriver "fel" värde kommer felmeddelandet
Ny koll görs igen på värdet
Felmeddelande visas
Ny koll på värdet
Felmeddelande visas

Ser du mönstret?
Och vad som saknas?
Du ger aldrig användaren en chans att rätta till sitt värde.

Var ganska längesen jag använde C++ så det kan hända att jag läst koden fel

Detta och inlägget ovan fick mig att göra en annan sökning på Google som jag ej tänkt på innan, men nu funkar det...:

Kod nedan, men hur flyttar jag "," (kommatecknet) så att det blir där jag vill ha det? Om jag vill avrunda etc?

#include<iostream> #include<conio.h> using namespace std; int main () { cout << "This program calculates the volume of a cylinder.\nPress ENTER and follow the on-screen instructions." << endl; cin.get (); cout << "\nEnter the radius of the base of a cylinder in cm." << endl; double radius; double height; while (cin>> radius && radius<=0){ cout << "\nEnter a positive number for the radius!" << endl; } cout << "\nEnter the height of the cylinder in cm." << endl; cin>>height; cout << "\nCylinder volume: "<< 3.14159265359*radius*radius*height <<" cm3"<< endl; cout << "\n\n\n\n\nPress any key to shut down the program." << endl; getch(); return 0; }

Kan jag på något vis göra så att där det står "Press ENTER..." så måste man trycka på just en ENTER tangent, annars händer inget?
Och kan jag välja på slutet att om jag skriver in ett R/r så kan man starta om programmet och mata in nya siffror och N/n för att stänga av programmet. Alternativt istället för N/n så trycker man på Esc tangenten för att stänga av programmet...

Permalänk
Medlem

Med tanke på att du inte i dagsläget satsar på VM i programering så hade jag valt en lättare lösning.
I din förra kod hade du break.
Byt ut det mot cin>>radie;

Permalänk
Medlem
Skrivet av Agonotheta:

Med tanke på att du inte i dagsläget satsar på VM i programering så hade jag valt en lättare lösning.
I din förra kod hade du break.
Byt ut det mot cin>>radie;

Nu hänger jag inte med?
Vad ska jag byta ut? Koden funkar ju nu?

Och nej inget VM men kul att lära sig och testa ytteligare funktioner?

Permalänk
Medlem
Skrivet av ApeviaX:

#include<iostream> #include<conio.h> using namespace std; int main () { cout << "Detta program beräknar en cylinders volym i cm3.\nTryck ENTER och följ anvisningarna på skärmen" << endl; cin.get (); cout << "\nAnge radien på basen av en cylinder i cm." << endl; double radie; double hight; cin>>radie; while (radie<=0){ cout << "\nAnge ett positivt tal för radien" << endl; cin>>radie; } cout << "\nAnge höjden på samma cylinder i cm." << endl; cin>>hight; cout << "\nCylinderns volym: "<< 3.14159265359*radie*radie*hight <<" cm3"<< endl; getch(); return 0; }

Så här menade jag