Archief - C++ Beginners code - probleempje

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

GrImReApEr

Legacy Member
Hallo,

Ik ben momenteel aan het proberen c++ te leren. Momenteel heb ik in een programmaatje een fout, waar ik echt geen enkele oplossing op vindt. Het is de bedoeling dat op het einde de while-loop terug naar het begin keert en er dus weer een cijfer berekend kan worden. Dit doet hij echter niet en het programma sluit af.
Hier is de code:



PHP:
//Grades.cpp
#include <iostream>
#include <string>
	
int main ()
{
	using namespace std;

const float ENGLISH_MIDTERM_PERCENTAGE = .25;
const float ENGLISH_FINALEXAM_PERCENTAGE = .25;
const float ENGLISH_RESEARCH_PERCENTAGE = .30;
const float ENGLISH_PRESENTATION_PERCENTAGE = .20;

const float MATH_MIDTERM_PERCENTAGE = .50;
const float MATH_FINALEXAM_PERCENTAGE = .50;

const float SCIENCE_MIDTERM_PERCENTAGE = .40;
const float SCIENCE_FINALEXAM_PERCENTAGE = .40;
const float SCIENCE_RESEARCH_PERCENTAGE = .20;

	int midterm;
	int finalExamGrade;
	int research;
	int presentation; 
	float finalNumericGrade;
	char response[256];
	char finalLetterGrade;
	string antwoord;
	
	cout << "Do you want to calculate a grade? "; 
	cin >> antwoord;
	
	for (int i = 0; i < antwoord.length(); i++) {
	antwoord[i] = toupper(antwoord[i]);
	}
	
	while (antwoord == "YES") {
	
	//Type of student
	cout << "What type of student? 1 = English, 2 = Math, 3 = Science ";
	cin.ignore();
	cin.getline(response,256);

	if (strlen(response) == 0)
	{
		cout << "You must select a student type!";
	return 1;
	}
	if ((atoi(response) < 1 ) || (atoi(response) > 3))
	{
		cout << response << " is not a valid student type!";
	return 1;
	}
	//valid studenttype!
	switch(atoi(response))		//begin switch
	{
case 1: // English student
		cout << "Enter the midterm grade: ";
		cin.getline(response,256);
		midterm = atoi(response);		//declaratie variabele, response mag terug leeg
		
		cout << "Enter the Final exam grade: ";
		cin.getline(response,256);
		finalExamGrade = atoi(response);
		
		cout << "Enter the research grade: ";
		cin.getline(response,256);
		research = atoi(response);
		
		cout << "Enter the presentation grade: ";
		cin.getline(response,256);
		presentation = atoi(response);
		finalNumericGrade = (midterm * ENGLISH_MIDTERM_PERCENTAGE) + (finalExamGrade*ENGLISH_FINALEXAM_PERCENTAGE) + 
		(research * ENGLISH_RESEARCH_PERCENTAGE) + (presentation * ENGLISH_PRESENTATION_PERCENTAGE);
		
		if (finalNumericGrade >= 93) 
			finalLetterGrade = 'A';
		else
		if ((finalNumericGrade >= 85) & (finalNumericGrade < 93))
			finalLetterGrade = 'B';
		else
		if ((finalNumericGrade <85) & (finalNumericGrade >=78))
			finalLetterGrade = 'C';
		else
		if ((finalNumericGrade <78) & (finalNumericGrade >=70))
			finalLetterGrade = 'D';
		else
		if (finalNumericGrade < 70)
			finalLetterGrade = 'F';
			
		cout << endl <<
		"**** ENGLISH STUDENT ****" << endl << endl;
		cout << "Final midterm grade is: " << midterm << endl;
		cout << "Final exam grade is: " << finalExamGrade << endl;
		cout << "Final research grade is: " << research << endl;
		cout << "Final presentation grade is: " << presentation << endl << endl;
		
		cout << "Final numeric grade is: " << finalNumericGrade << endl;
		cout << "Final letter grade is: " << finalLetterGrade;
		break;
case 2: // Math student
		cout << "Enter the midterm grade: ";
		cin.getline(response,256);
		midterm = atoi(response);		//declaratie variabele, response mag terug leeg
		
		cout << "Enter the Final exam grade: ";
		cin.getline(response,256);
		finalExamGrade = atoi(response);
		
		
		finalNumericGrade = (midterm * MATH_MIDTERM_PERCENTAGE) + (finalExamGrade*MATH_FINALEXAM_PERCENTAGE);
		
		if (finalNumericGrade >= 93) 
			finalLetterGrade = 'A';
		else
		if ((finalNumericGrade >= 85) & (finalNumericGrade < 93))
			finalLetterGrade = 'B';
		else
		if ((finalNumericGrade <85) & (finalNumericGrade >=78))
			finalLetterGrade = 'C';
		else
		if ((finalNumericGrade <78) & (finalNumericGrade >=70))
			finalLetterGrade = 'D';
		else
		if (finalNumericGrade < 70)
			finalLetterGrade = 'F';
			
		cout << endl <<
		"**** MATH STUDENT ****" << endl << endl;
		cout << "Final midterm grade is: " << midterm << endl;
		cout << "Final exam grade is: " << finalExamGrade << endl << endl;
		
		cout << "Final numeric grade is: " << finalNumericGrade << endl;
		cout << "Final letter grade is: " << finalLetterGrade;
		break;
case 3: //SCIENCE student
		cout << "Enter the midterm grade: ";
		cin.getline(response,256);
		midterm = atoi(response);		//declaratie variabele, response mag terug leeg
		
		cout << "Enter the Final exam grade: ";
		cin.getline(response,256);
		finalExamGrade = atoi(response);
		
		cout << "Enter the research grade: ";
		cin.getline(response,256);
		research = atoi(response);
		
		finalNumericGrade = (midterm * SCIENCE_MIDTERM_PERCENTAGE) + (finalExamGrade*SCIENCE_FINALEXAM_PERCENTAGE) + (research * SCIENCE_RESEARCH_PERCENTAGE);
		
		if (finalNumericGrade >= 93) 
			finalLetterGrade = 'A';
		else
		if ((finalNumericGrade >= 85) & (finalNumericGrade < 93))
			finalLetterGrade = 'B';
		else
		if ((finalNumericGrade <85) & (finalNumericGrade >=78))
			finalLetterGrade = 'C';
		else
		if ((finalNumericGrade <78) & (finalNumericGrade >=70))
			finalLetterGrade = 'D';
		else
		if (finalNumericGrade < 70)
			finalLetterGrade = 'F';
			
		cout << endl <<
		"**** SCIENCE STUDENT ****" << endl << endl;
		cout << "Final midterm grade is: " << midterm << endl;
		cout << "Final exam grade is: " << finalExamGrade << endl;
		cout << "Final research grade is: " << research << endl << endl;
		
		cout << "Final numeric grade is: " << finalNumericGrade << endl;
		cout << "Final letter grade is: " << finalLetterGrade;
		break;	
default:
			cout << response << " is not a valid student type. ";
			return (1);
	}
	
	cout << endl << endl << "Do you have another grade to calculate? "; 
	cin >> antwoord;
	for (int i = 0; i < antwoord.length(); i++)	{	//begin forlus
	antwoord = toupper(antwoord[i]);	//capitals maken van yes --> YES 
	} 						//einde for lus
	} 						//einde While lus?
	cout <<	"Thanks for using the grade calculation program! ";
			
	return 0;
}																		//einde main functie


Hopelijk kunnen jullie eraan uit, iemand een idee waarom de while lus niet terug naar het begin gaat?

Parnakra

Legacy Member
Code:
for (int i = 0; i < antwoord.length(); i++) {
antwoord[i] = toupper(antwoord[i]);
}
vs.
Code:
for (int i = 0; i < antwoord.length(); i++) {
antwoord = toupper(antwoord[i]);
}

GrImReApEr

Legacy Member
Parnakra zei:
Code:
for (int i = 0; i < antwoord.length(); i++) {
antwoord[i] = toupper(antwoord[i]);
}
vs.
Code:
for (int i = 0; i < antwoord.length(); i++) {
antwoord = toupper(antwoord[i]);
}

shit, ik wist dat het iets klein ging zijn, heel hard bedankt!

Parnakra

Legacy Member
GrImReApEr zei:
shit, ik wist dat het iets klein ging zijn, heel hard bedankt!
Dit is trouwens de perfecte leerschool om in te zien dat herhaling (van code) aanleiding geeft tot fouten (en code rot in het algemeen).

In dit geval zou je deze functionaliteit (een string naar hoofdletters omzetten) dus best afzonderen in een eigen functie (even buiten beschouwing gelaten dat deze functionaliteit al ergens anders beschikbaar gesteld wordt).

GrImReApEr

Legacy Member
Inderdaad! Daar zit ik nu aan, functies, het eerste moeilijkere stukje precies. Hierna komen de classes, heb dus nog heel wat werk voor de boeg!

Bedankt voor je inbreng! :applause:

GammaGamer

Legacy Member
GrImReApEr zei:
Inderdaad! Daar zit ik nu aan, functies, het eerste moeilijkere stukje precies. Hierna komen de classes, heb dus nog heel wat werk voor de boeg!

Bedankt voor je inbreng! :applause:
Vraagje, welk boek/site gebruik je?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan