Vinnaren i pepparkakshustävlingen!
2017-01-14, 16:57
  #1
Medlem
Hej!

Behöver hjälp att göra en While loop som gör så att efter personen matat in sina värden och tryckt Ja för att skriva in nya värden genom att köra programmet igen i samma konsol.

Kod:
#include "stdafx.h"
#include <iostream>	
#include <string>
using namespace std;


int main()
{
	double bas, höjd;
	char svar;

	cout << "Mata in bas och höjd efter varandra: ";
	cin >> bas >> höjd;

	cout << "Här är arean på din valda rektangel: " << bas * höjd << " cm" << endl;
	cout << "Här är omkretsen på din valda rektangel: " << 2 * (bas)+(höjd) * 2 << " cm" << endl;
	cout << endl;
	cout << "Vill du göra om några beräkningar? " << endl;
	cin >> svar;
	if (svar == 'j') {
		
		int main();
		
	}

	return 0;
}
Citera
2017-01-14, 17:05
  #2
Medlem
Mia-Rovys avatar
Du behöver lära dig att be om hjälp på ett effektivare sätt.

När man ber om hjälp så är det fördelaktigt (och artigt) att direkt förse den man frågar med nödvändig information.

Vad är frågan? Varför är viss kod fetmarkerad? Får du något felmeddelande med den koden eller händer något annat? Vad? Skriver du "j" eller "ja"?

Visst, vi kan alla sitta och bygga programmet själva eller mentalt köra det, och försöka ta reda på alla frågor. Men varför skulle vi bemöda oss med det när du inte bemödar dig det?

Att du postar koden (och till och med fetmarkerar någonting som kanske är relevant) är dock ett pluspoäng som annars är en sorgligt vanlig miss.
__________________
Senast redigerad av Mia-Rovy 2017-01-14 kl. 17:09.
Citera
2017-01-14, 17:48
  #3
Medlem
Kod:
#include "stdafx.h"
#include <iostream>    
#include <string>
using namespace std;


int main()
{
    
double bashöjd;
    
char svar;
while(
true)
{
    
cout << "Mata in bas och höjd efter varandra: ";
    
cin >> bas >> höjd;

    
cout << "Här är arean på din valda rektangel: " << bas höjd << " cm" << endl;
    
cout << "Här är omkretsen på din valda rektangel: " << * (bas)+(höjd) * << " cm" << endl;
    
cout << endl;
    
cout << "Vill du göra om några beräkningar? " << endl;
    
cin >> svar;
    if (
svar == 'n')
           break;
}

    return 
0;

Enkelt sätt
Citera
2017-01-14, 19:48
  #4
Moderator
Neksnors avatar
Kan vara lämpligt att först fundera på vilken beräkning som ska utföras och fixa en metod som gör det. Sedan handlar det om att kunna kommunicera med omvärlden, hantering av indata och utdata. Kan hanteras i andra metoder. Avslutningsvis ett "användargränssnitt", den där whileloopen, som eventuellt kan brytas, som anropar de olika metoderna.

Att anropa main från main låter inte helt kosher.
Citera
2017-01-20, 01:57
  #5
Medlem
www3s avatar
I C är det ok att anropa main i main men inte i C++. Du ska ju inte skriva "int main();" när du anropar main igen, utan bara "main();" eller "return main();". Tänk på att du kan få en stack overflow error om du anropar en funktion i en funktion för mycket. Att anropa en funktion i en funktion kallas recursion.

Exempel:

#include <iostream>

static unsigned int i=0;

int main()
{
++i;
std::cout << "inside main count " << i << "\n";
if(i<10) return main();
}
Citera
2017-01-20, 14:35
  #6
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av www3
I C är det ok att anropa main i main men inte i C++. Du ska ju inte skriva "int main();" när du anropar main igen, utan bara "main();" eller "return main();". Tänk på att du kan få en stack overflow error om du anropar en funktion i en funktion för mycket. Att anropa en funktion i en funktion kallas recursion.

Exempel:

#include <iostream>

static unsigned int i=0;

int main()
{
++i;
std::cout << "inside main count " << i << "\n";
if(i<10) return main();
}
Förtydligande: en funktion som anropar sig själv kallas rekursion.
Citera
2017-01-20, 23:29
  #7
Medlem
Joakwims avatar
Citat:
Ursprungligen postat av Neksnor
Kan vara lämpligt att först fundera på vilken beräkning som ska utföras och fixa en metod som gör det. [...]
För TS program är det nog smidigare med en funktion snarare än en metod (en metod är en medlemsfunktion i en klass).
Citera
2017-01-22, 03:20
  #8
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av Joakwim
För TS program är det nog smidigare med en funktion snarare än en metod (en metod är en medlemsfunktion i en klass).
Har ingen koll alls på vad saker heter i diverse C-språk. Borde väl kallat det funktion, det känns som ett lagom neutralt ord, men jag gissar att någon matematikinriktad individ hade haft invändningar mot det.
Citera
2017-03-28, 16:00
  #9
Medlem
Brukar köra en char startaOm = 'Y' och köra en while (startaOm=='y' || startaOm =='Y') typ, enkelt och tydligt med en Y/n-fråga på slutet
såhär för dig då:

int main()
{
double bas, höjd;
char startaOm='Y';

while (startaOm=='y' || startaOm=='Y'){


cout << "Mata in bas och höjd efter varandra: ";
cin >> bas >> höjd;

cout << "Här är arean på din valda rektangel: " << bas * höjd << " cm" << endl;
cout << "Här är omkretsen på din valda rektangel: " << 2 * (bas)+(höjd) * 2 << " cm" << endl;
cout << endl;
cout << "Vill du göra om några beräkningar? (Y/n) " << endl;
cin >> startaOm;
}
}
__________________
Senast redigerad av princess. 2017-03-28 kl. 16:47.
Citera
2017-03-28, 16:20
  #10
Medlem
Citat:
Ursprungligen postat av princess.
Brukar köra en char startaOm = 'Y' och köra en while (startaOm=='y' || startaOm =='Y') typ, enkelt och tydligt med en Y/n-fråga på slutet
såhär för dig då:

int main()
{
while (startaOm=='y' || startaOm=='Y'){
double bas, höjd;
char startaOm='y';

cout << "Mata in bas och höjd efter varandra: ";
cin >> bas >> höjd;

cout << "Här är arean på din valda rektangel: " << bas * höjd << " cm" << endl;
cout << "Här är omkretsen på din valda rektangel: " << 2 * (bas)+(höjd) * 2 << " cm" << endl;
cout << endl;
cout << "Vill du göra om några beräkningar? (Y/n) " << endl;
cin >> startaOm;
}
}
Brukar du ofta ha din kontrollvariabel innanför den loop som är beroende av denna kontroll-variabel?

Normalt är det väl dessutom bättre om du lär ditt program att fråga efter y/n på ett sätt där din kontrollvariabel är en bool så slipper du hela tiden matcha mot både 'y' och 'Y'. Samt kan lätt även hantera 'j' eller 'J' för svensktalande användare.

Kom även ihåg att arean inte mäts i centimeter utan i kvadratcentimeter.
Citera
2017-03-28, 16:46
  #11
Medlem
Citat:
Ursprungligen postat av cellplast
Brukar du ofta ha din kontrollvariabel innanför den loop som är beroende av denna kontroll-variabel?

Självklart 😑
Nej gick förstås lite fort när jag kopierade in hans kod.
__________________
Senast redigerad av princess. 2017-03-28 kl. 16:49.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback