Permalänk
Medlem

Pausa C++ konsol program mitt i

Är det någon som vet hur man åstadkommer vad som står i titeln.
Jag har försökt med

cin.ignore(1, '\n');

cin.get();

och

getchar();

Men den hoppar förbi det varje gång och det gör det svårt att hinna läsa texten som kommer upp.

Permalänk
Hedersmedlem

Har du testat att kombinera ignore och get? Om du har läst in något tidigare kan ett '\n' ligga kvar i bufferten (för att sedan läsas in när du kör cin.get()).

cin.ignore(1000, '\n'); cin.get();

Permalänk
Medlem
Skrivet av Elgot:

Har du testat att kombinera ignore och get? Om du har läst in något tidigare kan ett '\n' ligga kvar i bufferten (för att sedan läsas in när du kör cin.get()).

cin.ignore(1000, '\n'); cin.get();

Det hade jag inte och det funkade, tack så mycket!

Permalänk
Medlem

Fått ett nytt problem...

cout << "Vänligen ange din:\n\nLängd (cm): "; cin >> lenght; //ANvändaren anger sin längd i cm cout << "\nVikt (kg): "; cin >> weight; //ANvändaren anger sin vikt lenght = lenght/100; //Programmet gör om cm till m bmi = weight / pow(lenght, 2); //Programmet räknar ut användarens bmi

Så, senare när den skriver ut vilket BMI användaren har så skriver den bara vikten. förstår inte alls varför.. Kommentaerarna står där för att det är ett skolarbete och vi skulle kommentera koden för högre betygsnivå.

jag har med biblioteket <math.h>

Permalänk
Hedersmedlem
Skrivet av Trisstar:

Fått ett nytt problem...

cout << "Vänligen ange din:\n\nLängd (cm): "; cin >> lenght; //ANvändaren anger sin längd i cm cout << "\nVikt (kg): "; cin >> weight; //ANvändaren anger sin vikt lenght = lenght/100; //Programmet gör om cm till m bmi = weight / pow(lenght, 2); //Programmet räknar ut användarens bmi

Så, senare när den skriver ut vilket BMI användaren har så skriver den bara vikten. förstår inte alls varför.. Kommentaerarna står där för att det är ett skolarbete och vi skulle kommentera koden för högre betygsnivå.

jag har med biblioteket <math.h>

Testa att skriva ut lenght...
när du skriver
lenght/100
ser kompilatorn att du bara använder heltal* och antar därför att du vill göra en heltalsdivision (dvs. utan decimaler).

*nu antar jag alltså att lenght är av typen int; det borde ge det där beteendet.

Permalänk
Medlem
Skrivet av Elgot:

Testa att skriva ut lenght...
när du skriver
lenght/100
ser kompilatorn att du bara använder heltal* och antar därför att du vill göra en heltalsdivision (dvs. utan decimaler).

*nu antar jag alltså att lenght är av typen int; det borde ge det där beteendet.

Förstår inte riktigt ad du menar, men här har du hela koden om du eller ngn annan vill titta närmare

#include <iostream> #include <string> //Biblioteket som tillåter användandet av strings #include <iomanip> #include <math.h> //Biblioteket som tillåter mig att använda pow() för upphöjning using namespace std; int main() { setlocale(LC_ALL, ""); //Möjligtför för programmet att skriva Å, Ä och Ö int decision1, lenght, weight; float bmi; //Använder float för att den ska kunna räknas ut med decimaler. string gender, repeat = "n"; do //Början av do-while loopen som tillåter användaren att köra om programmet och avsluta det vid behov. { cin.clear(); //Tömmer cin på värden från förra körningen system("cls"); //Tömmer skärmen på text från förra körningen cout << "********************\n****BMI RÄKNARE*****\n********************\n" << endl; cout << "Välkommen till mitt BMI program, vänligen mata in siffran motsvarande vad du\nvill göra\n" << endl; cout << "1. Börja räkna\n2. Visa information\n0. Avsluta\n\nAnge ditt val: "; //Menyn decision1: /*Gjorde om uppgiften från vad jag hade tänkt från början och försökte att göra den utan kunskap om while vi fick efter det egentligen kunde göra, därför finns det två stycken goto i koden. en av dem hoppar hit*/ cin >> decision1; if(decision1 == 1) { system("cls"); //Tömmer skärmen på texten från menyn. cout << "Vänligen ange din:\n\nLängd (cm): "; cin >> lenght; //ANvändaren anger sin längd i cm cout << "\nVikt (kg): "; cin >> weight; //ANvändaren anger sin vikt lenght = lenght/100; //Programmet gör om cm till m bmi = weight / pow(lenght, 2); //Programmet räknar ut användarens bmi cout << "\nAnge ditt kön (man/kvinna): "; genderDecision: //Andra stället dit ett goto hoppar cin >> gender; //Användaren anger sitt kön if(gender == "man") //If satsen som körs om användaren anger sitt kön som "man" { if(bmi < 20) //If satsen som körs om användaren är man ochär underviktig { cout << "\n\nDitt BMI är " << bmi << ", vilket klassar dig som underviktig. Du behöver gå upp " << 20 - bmi << " kg för att bli normalviktig." << endl; } else if(bmi <= 24.9 && bmi >= 20) //If satsen som körs om användaren är man och normalviktig { cout << "\n\nDitt BMI är " << bmi << ", vilket klassar dig som normalviktig." << endl; } else if (bmi >= 25 && bmi <= 29.9) //If satsen som körs om användaren är man och överviktig { cout << "\n\nDitt BMI är " << bmi << ", vilket klassar dig som överviktig. Du behöver gå ner " << bmi - 25.1 << " kg för att bli normalviktig." << endl; } else //If satsen som körs om användaren är man och lider av fetma { cout << "\n\nDitt BMI är "<< bmi << ", vilket betyder att du lider av fetma. Du behöver gå ner " << bmi - 25.1 << " kg för att bli normalviktig." << endl; } } else if(gender == "kvinna") { if(bmi > 18.5) //If satsen som körs om användaren är kvinna och underviktig { cout << "\n\nDitt BMI är " << bmi << ", vilket klassar dig som underviktig. Du behöver gå upp " << 18.5 - bmi << " kg för att bli normalviktig." << endl; } else if(bmi <= 23.9 && bmi >= 28.5) //If satsen som körs om användaren är kvinna och normalviktig { cout << "\n\nDitt BMI är " << bmi << ", vilket klassar dig som normalviktig." << endl; } else if (bmi >= 24 && bmi <= 28.9) //If satsen som körs om användaren är kvinna och överviktig { cout << "\n\nDitt BMI är " << bmi << ", vilket klassar dig som överviktig. Du behöver gå ner " << bmi - 24.1 << " kg för att bli normalviktig." << endl; } else //If satsen som körs om användaren är kvinna och lider av fetma { cout << "\n\nDitt BMI är "<< bmi << ", vilket betyder att du lider av fetma. Du behöver gå ner " << bmi - 24.1 << " kg för att bli normalviktig." << endl; } } else //Detta körs om användaren inte matar in "man" eller "kvinna" som kön { cout << "Felaktig inmatning. Vänligen ange kön (man/kvinna): "; goto genderDecision; //Skickar tillbaka användaren till dä rde matar in kön } cout << "\nVill du avsluta programmet (j/n): "; //Användaren får välja att stänga av programmet eller köra om. cin >> repeat; } else if (decision1 == 2) //Denna if sats körs om användaren matar in 2 för att se information { system("cls"); cout << "BMI eller, Body Mass Index, anger relationen mellan vikt och längd enligt beräkningen kroppsvikt i kilogram dividerat med kroppslängden i meter i kvadrat." << endl; cout << "När man pratar om BMI så finns det 4 olika viktklasser: Underviktig, normalviktig, överviktig och fetma." << endl; cout << "Följande är gränsvärdena för de olika viktklasserna definierade av WHO:\n\n" << endl; cout << "Viktklasser Män: Kvinnor:\nUndervikt Under 20 Under 18,5\nNormalvikt 20 - 24,9 18,5 - 23,9\nÖvervikt 25 - 29,9 24 - 28,9\nFetma 30 eller mer 29 eller mer" << endl; cout << "\nKlicka enter för att komma tillbaka till menyn." << endl; cin.ignore(1000, '\n'); cin.get(); //Pausar programmet så att användaren hinner läsa texten. } else //Denna del var för om användaren väljer att avsluta programmet. Den ändrar repeat variabeln så att do-while loopen inte körs igen. { repeat = "j"; } } while (repeat == "n"); //Anger att loopen körs så länge variabeln "repeat" är lika med "n" system("pause"); return 0; }

Dold text

EDIT; Koden står med en massa indenteringar vid viktklasser för att den skriv upp i tabellform, typ

Permalänk
Hedersmedlem
Skrivet av Trisstar:

int decision1, lenght, weight;

Här defininierar du lenght som en int, dvs. som heltal, så den kan inte användas för att lagra tal med decimaler. Om du till exempel skriver
lenght = 1.5;
kommer length sedan innehålla 1
lenght = 7.8;
ger 7 och så vidare. Decimaler kastas.

Dessutom är c++ lite petig med vilken typ av värden man använder vid till exempel division.
4/5 blir till exempel 0 eftersom 4 "inte går någon gång i 5". 4/5.0 blir däremot 0,8 då 5.0 är ett flyttal och divisionen därför blir en flyttalsdivision istället för en heltalsdivision.

Permalänk
Medlem
Skrivet av Elgot:

Här defininierar du lenght som en int, dvs. som heltal, så den kan inte användas för att lagra tal med decimaler. Om du till exempel skriver
lenght = 1.5;
kommer length sedan innehålla 1
lenght = 7.8;
ger 7 och så vidare. Decimaler kastas.

Dessutom är c++ lite petig med vilken typ av värden man använder vid till exempel division.
4/5 blir till exempel 0 eftersom 4 "inte går någon gång i 5". 4/5.0 blir däremot 0,8 då 5.0 är ett flyttal och divisionen därför blir en flyttalsdivision istället för en heltalsdivision.

Så det räcker inte med att bara göra bmi till float? borde jag göra både längd och vikt till det också?

Permalänk
Medlem
Skrivet av Trisstar:

Så det räcker inte med att bara göra bmi till float? borde jag göra både längd och vikt till det också?

Antingen det, eller så borde du kunna casta en av variablerna till flyttal när du räknar ut bmi. Exempelvis genom att slänga in (float) framför weight.

Visa signatur

Stationärt: i7 3770k, Gigabyte GTX 780 WF, 4x8GB XMS3, MSI Z77A-GD65, Samsung 830 + 840, FD Newton 650W, FD Define R2
Bärbart: MacBook Pro 13" Tidigt 2011, Core i5, 8GB DDR3, OCZ Vertex 3 LT 240GB
Hemmaserver: HP Microserver N54L, 4GB ECC, Debian

Permalänk
Medlem

Verkar inte går att göra om lenght till float på samma rad som jag räknar om cm till m för då var den inte "initialized", så jag gjorde om den till float längst upp och nu verkar det funka bra. Tack så mycket för hjälpen!

Permalänk
Hedersmedlem
Skrivet av Trisstar:

Så det räcker inte med att bara göra bmi till float? borde jag göra både längd och vikt till det också?

Annars kan du vänta med att konvertera till meter:

bmi = weight / pow(lenght/100.0, 2);

Att använda 100.0 ("100." eller "100f" går också bra) istället för 100 gör operationen till en flyttalsdivision.