Uppgift programmering 1 c++, hitta felen.
Hej jag har kört fast rejält på en uppgift, och behöver vägledning (bra förklaring uppskattas även).Koden skal innehålla endel kompileringsfel, ett logisktfel och även någon sortsbugg som gör att programmet krashar.
Här är orginal koden med alla fel:
int i = 0;
while(i <= 24)
{
cout << "ange temperatur för timme " << i << ";";
inte newTemp
cin >> newTemp;
totalTemp = totalTemp + newTemp;
i++;
}
cout << "Medeltemperaturen för dygnet är " totalTemp/24 << " grader";
Och här är en av åtgärderna jag kommit fram till, verkar alltid fastna med kompilatorn på "while"
#include <iostream>
int main();
using namespace std;
int i = 0;
while(i <= 24)
{
cout << "ange temperatur för timme " << i << ";";
int newTemp
cin >> newTemp;
totalTemp = totalTemp + newTemp;
i++;
cout << "Medeltemperaturen för dygnet är " totalTemp/24 << " grader";
}
Fastna hur? Vad är felmeddelandet?
Här är rättningen så att det bygger, men du får nog titta på programlogiken, varför dela med 24 ? du skall väl dela med antal timmar som gått.
"main" är standard startpunkt i programmet.
#include <iostream>
using namespace std;
int main() // detta är entry point i ditt program
{
int i = 0;
int totalTemp = 0; // detta saknades
while(i <= 24)
{
cout << "ange temperatur för timme " << i << ";";
int newTemp; // saknade ; efter
cin >> newTemp;
totalTemp = totalTemp + newTemp;
++i; // normalt gör man prefix incr när det står självt.
// om du bara skriver /24 blir det en heltalsdivision
cout << "Medeltemperaturen för dygnet är " << totalTemp/24.0 << " grader";
}
}
anders_k skrev:Här är rättningen så att det bygger, men du får nog titta på programlogiken, varför dela med 24 ? du skall väl dela med antal timmar som gått.
"main" är standard startpunkt i programmet.
#include <iostream> using namespace std; int main() // detta är entry point i ditt program { int i = 0; int totalTemp = 0; // detta saknades while(i <= 24) { cout << "ange temperatur för timme " << i << ";"; int newTemp; // saknade ; efter cin >> newTemp; totalTemp = totalTemp + newTemp; ++i; // normalt gör man prefix incr när det står självt. // om du bara skriver /24 blir det en heltalsdivision cout << "Medeltemperaturen för dygnet är " << totalTemp/24.0 << " grader"; } }
Tack för snabbt svar. förklarade lite dåligt såg jag men programmet ska räkna ut medeltemperaturen på dygnet dvs temperaturen varje timme / 24timmar, vilket den gör nu. Dock så ändrade jag "int i = 0;" till 1 då den ville räkna på timme 0. Buggen är att om man knappar in bokstäver så krashar programmet.
Om du inte vill att användaren ska ange något annat än heltal kan du anävnda dig av ett try and catch block. Man skulle exempelvis kunna gör så att så länge som användaren inte anger en vettigt input så får man försöka igen, eller alternativt avsluta programmet på ett fint sätt.
no15y skrev:Buggen är att om man knappar in bokstäver så krashar programmet.
Du kan också läsa in det som en sträng och konvertera sen till heltal. Då kan du också skriva ut vad användaren matade in i ditt felmeddelande till användaren.
t.ex. konvertera med std::stoi och hantera exception eller använd std::from_chars om du inte vill hantera exception.
antingen gör jag fel eller så behövs något annat, Hela programmet spammar ut alla timmar (24) so fort ett tecken eller bokstavs trycks. har googlat rätt mycket nu och en ide skulle vara att lägga till "if (number) eller else if ifalpha och om den är sann ge felmeddelande där, dock så löser inte det Å Ä Ö eller tecken, är jag helt ute och cyklar nu? Känns som att det borde finnas en enkel lösning för att inte programmet ska få helfnatt och printa ut allting.
Istället för
int newTemp; // saknade ; efter
cin >> newTemp;
Skriv
string s;
int newTemp{0};
try
{
getline(cin, s);
newTemp = stoi(s);
}
catch(const invalid_argument& ex)
{
cerr << "ogiltligt nummer: " << s << endl;
}
catch(const exception& ex)
{
cerr << ex.what() << endl;
}
tusen tack!