Gå til innhold

Mitt første cpp program, hjelp til å fikse loop


Anbefalte innlegg

Hei!

 

Holder på med å Accelerated C++ og har nå laget mitt første program

som ikke er "skrevet av" boka. :)

 

Programmet lar deg skrive inn hvilken gangetabell du vil prøve på også

genererer den de 10 første stykkene fra den tabellen.

Etter at du har svart, får du vite hvor mange du hadde rett og hvor mange

som var feil.

 

Det som er probelemt er vis jeg skriever inn f.eks 'a' istede for '2' så begynner loopen

å gå rundt å rundt uten å stoppe :(

 

Jeg trenger en slags is numeric function, for å sjekke om input fra brukeren er et tall

eller ikke.

Og det hadde vært fint om dere kun forklart hvordan den virker og ikke bare gi meg

koden.

 

Ellers ville jeg likt kommentarer på hva som kan for enkles og hva som ikke er så

lurt å gjøre som jeg har gjort i koden under.

 

#include <iostream>
using namespace std;

int r = rand();

int main()
{
bool bRun = true;

while (bRun == true)
{
	cout << "*****************************" << endl;
	cout << "* Gangetabell Testeren v1.0 *" << endl;
	cout << "*  Avslutt ved aa skrive 0  *" << endl;
	cout << "*   naar du velger tabell   *" << endl;
	cout << "*****************************" << endl << endl;

	cout << "Skriv et tall mellom 1-10: ";
	int iTall;
	cin >> iTall;

	if (iTall >= 11)
	{
		system("cls");

		cout << "*****************************" << endl;
		cout << "* Gangetabell Testeren v1.0 *" << endl;
		cout << "*****************************" << endl << endl;

		cout << endl << "Tallet kan ikke v\'ae\'re st\'oe\'rre en 10!" << endl;
		system("pause");
		system("cls");
	}
	else if (iTall == 0)
	{
		bRun = false;
	}
	else if (iTall < 0)
	{
		system("cls");

		cout << "*****************************" << endl;
		cout << "* Gangetabell Testeren v1.0 *" << endl;
		cout << "*****************************" << endl << endl;

		cout << endl << "Tallet kan ikke v\'ae\'re mindre en 1!" << endl;
		system("pause");
		system("cls");
	}
	else if (iTall >= 1 && iTall <= 10)
	{
		int iSvar[9];

		system("cls");

		cout << "*****************************" << endl;
		cout << "* Gangetabell Testeren v1.0 *" << endl;
		cout << "*****************************" << endl << endl;

		cout << "Du har valgt gangetabell nr." << iTall << endl << endl;
		cout << "Hva er " << iTall << "X1? ";
		cin >> iSvar[0];
		cout << "Hva er " << iTall << "X2? ";
		cin >> iSvar[1];
		cout << "Hva er " << iTall << "X3? ";
		cin >> iSvar[2];
		cout << "Hva er " << iTall << "X4? ";
		cin >> iSvar[3];
		cout << "Hva er " << iTall << "X5? ";
		cin >> iSvar[4];
		cout << "Hva er " << iTall << "X6? ";
		cin >> iSvar[5];
		cout << "Hva er " << iTall << "X7? ";
		cin >> iSvar[6];
		cout << "Hva er " << iTall << "X8? ";
		cin >> iSvar[7];
		cout << "Hva er " << iTall << "X9? ";
		cin >> iSvar[8];
		cout << "Hva er " << iTall << "X10? ";
		cin >> iSvar[9];

		system("cls");

		cout << "*****************************" << endl;
		cout << "* Gangetabell Testeren v1.0 *" << endl;
		cout << "*****************************" << endl << endl;

		int i = 0;
		while (i < 10)
		{
			int iSvar2 = iTall * (i+1);
			if (iSvar2 == iSvar[i])
			{
				cout << "Riktig\t" << iTall << "X" << (i+1) << "\t==\t" << iSvar2 << endl;
			}
			else
			{
				cout << "Feil\t" << iTall << "X" << (i+1) << "\t!=\t" << iSvar[i] << endl;
			}
			i++;
		}
		system("pause");
		system("cls");
	}
}
system("pause");
return 0;
}

 

Takk for svar!

main.txt

Endret av tehextinct
Lenke til kommentar
Videoannonse
Annonse

if(iTall >= 11) { blabla }

else if(iTall == 0){ blabla }

else if (iTall < 10) { yoyo }

else { bRun = false; }

 

Kan uansett ikke bruke char, da 10 ikke får plass i en char.

String er tho en mulighet.

Endret av eiiriik
Lenke til kommentar

Noe du kan forbedre koden med er å lage loops av sekvenser med kode som er veldig like som f. eks:

cout << "Hva er " << iTall << "X1? ";
		cin >> iSvar[0];
		cout << "Hva er " << iTall << "X2? ";
		cin >> iSvar[1];
		cout << "Hva er " << iTall << "X3? ";
		cin >> iSvar[2];
		cout << "Hva er " << iTall << "X4? ";
		cin >> iSvar[3];
		cout << "Hva er " << iTall << "X5? ";
		cin >> iSvar[4];
		cout << "Hva er " << iTall << "X6? ";
		cin >> iSvar[5];
		cout << "Hva er " << iTall << "X7? ";
		cin >> iSvar[6];
		cout << "Hva er " << iTall << "X8? ";
		cin >> iSvar[7];
		cout << "Hva er " << iTall << "X9? ";
		cin >> iSvar[8];
		cout << "Hva er " << iTall << "X10? ";
		cin >> iSvar[9];

 

Kan skrives om til:

for(int i = 0; i < 10; i++){
		cout << "Hva er " << iTall << "X" << i+1 << "?";
		cin >> iSvar[i];
}

 

Du kan også slå sammen innlesningen og kontrollen i en loop, slik at en ikke får gå videre til neste steg i gangetabellen før en har svart riktig på gjeldende.

 

 

for(int i = 1; i <= 10; i++){

cout << "Hva er " << iTall << " X " << i << "?";

cin >> iSvar;

while(!(iSvar == (iTall * i))){

cout << "Feil, prøv igjen... " << endl;

cin >> iSvar;

}

cout << "Riktig, " << iTall << " * " << i << " == " << iSvar << endl;

}

 

Lenke til kommentar
cout << "Skriv et tall mellom 1-10: ";

int iTall;

cin >> iTall;

 

if (iTall >= 11)

{

system("cls");

 

cout << "*****************************" << endl;

cout << "* Gangetabell Testeren v1.0 *" << endl;

cout << "*****************************" << endl << endl;

 

cout << endl << "Tallet kan ikke v\'ae\'re st\'oe\'rre en 10!" << endl;

system("pause");

system("cls");

}

else if (iTall == 0)

{

bRun = false;

}

else if (iTall < 0)

{

system("cls");

 

cout << "*****************************" << endl;

cout << "* Gangetabell Testeren v1.0 *" << endl;

cout << "*****************************" << endl << endl;

 

cout << endl << "Tallet kan ikke v\'ae\'re mindre en 1!" << endl;

system("pause");

system("cls");

}

else if (iTall >= 1 && iTall <= 10)

{

 

If-tester kan som regel løse det meste, men lek deg litt mer med løkker. :)

 

Denne koden kan f.eks. skrives som:

 

int iTall;

do

{

system("cls");

 

cout << "*****************************" << endl;

cout << "* Gangetabell Testeren v1.0 *" << endl;

cout << "*****************************" << endl << endl;

 

cout << "Skriv et tall mellom 1-10: ";

 

cin >> iTall;

 

cin.clear();

cin.ignore();

 

} while(iTall < 1 || iTall > 10);

 

En do-while løkke fungerer slik at statementet kjøres en gang uansett, deretter kjøres den igjen om nødvendig helt til "kravene" i while-testen er tilfredsstilt.

 

cin.clear() og cin.ignore() er her bare brukt for å ungå problemer ved inntasting av noe annet enn tall. Finnes garantert flere mer elegante måter å gjøre akkurat det på, men jeg er ikke så vel bevandret med iostreams.

Lenke til kommentar
  • 3 måneder senere...

Har laget noe her i notepad men ikke sikker på om det funker. Men iaf.:

 

#include <iostream>

using namespace std;

 

#define MULTIPLY(a,b) a * b

 

int array[10];

int numb;

int pause;

char txt[]= "*****************************\n"

"* Gangetabell Testeren v1.0 *\n"

"*****************************\n";

 

void clrscr()

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

COORD coord = {0, 0};

DWORD count;

CONSOLE_SCREEN_BUFFER_INFO csbi;

GetConsoleScreenBufferInfo(hStdOut, &csbi);

FillConsoleOutputCharacter(hStdOut, ' ', csbi.dwSize.X * csbi.dwSize.Y, coord, &count);

SetConsoleCursorPosition(hStdOut, coord);

}

 

int main()

{

while(1)

{

clrsrc();

cout << txt << "\nFor å avslutte programmet skriv '0'\nSkriv et tall mellom 1-10: ";

cin >> retval;

switch(retval)

{

case 11:

{

clrscr();

cout << txt << "\nTallet kan ikke være større enn 10!\n";

cin >> pause;

break;

}

case 0: {return 1;}

default:

{

if(retval<0||retval>10) break;

clrscr();

cout << text << "\nDu har valgt gangetabell nr." << retval << "\n\n";

for(int i=0; i!=11;++i) array = MULTIPLY(retval,i);

for(int x=0; x!=11;++x)

{

cout << "Hva er '" << retval << " x " << i << "'?\n";

cin >> numb;

if(numb==array) cout << "Riktig!\n";

else cout << "Feil, svaret var " << array << "\n";

}

break;

}

}

}

return 0;

}

Endret av zorgion
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...