tehextinct Skrevet 13. april 2008 Del Skrevet 13. april 2008 (endret) 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 13. april 2008 av tehextinct Lenke til kommentar
Cyberfrog Skrevet 13. april 2008 Del Skrevet 13. april 2008 Se på denne: http://www.cplusplus.com/reference/clibrary/cctype/ Er n00b selv, derfor ingen lang avhandling. Lykke til! Lenke til kommentar
eiiriik Skrevet 13. april 2008 Del Skrevet 13. april 2008 (endret) 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 13. april 2008 av eiiriik Lenke til kommentar
tehextinct Skrevet 13. april 2008 Forfatter Del Skrevet 13. april 2008 Takk! Problemet er løst. Lenke til kommentar
Mapster Skrevet 13. april 2008 Del Skrevet 13. april 2008 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
krakil Skrevet 14. april 2008 Del Skrevet 14. april 2008 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
亚历山大 Skrevet 27. juli 2008 Del Skrevet 27. juli 2008 (endret) 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 27. juli 2008 av zorgion Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå