moesen Skrevet 21. februar 2004 Del Skrevet 21. februar 2004 Hei Jeg skal lage ett program der du skal gjette hovedstader o.s.v. Her er koden så langt(med feil) #include <iostream> #include <string> using namespace std; int main() { cout << "Velkommen til Hovedstad-programmet!\n"; cout << "Skriv 'start' for og begynne programmet:\n"; string prg_start; cin >> prg_start; if(prg_start == "start") { cout << "Hva er hovedstaden i Norge?\n"; string hovedstad1; cin >> hovedstad1; if(hovedstad1 == "oslo"); { cout << "Riktig! Trykk enter for neste oppgave...\n"; cin.get(); } else { cout << "Feil! Riktig svar er oslo\n"; } } else { cout << "Du skrev ikke 'start', pr0v igjen...\n"; cin.get(); } return(0); } Er en stund siden jeg holdt på med C++... Det jeg lurer på er; Hva er feil i programmet mitt? (Sannsynligvis if/else løkken) Hvordan får jeg det slik at programmet ikke merker forsjell på store og små bokstaver? F.eks if(prg_start == "start") Hvis man skriver Start/START/starT istedet for "start"... Ellers noen tips til programmet? Lenke til kommentar
☀ ❄ Skrevet 21. februar 2004 Del Skrevet 21. februar 2004 (endret) Feilen din er denne: if(hovedstad1 == "oslo"); { Ta bort semikolonet, du For å oppheve "case sensitivity" kan du skrive en funksjon som benytter seg av C-funksjonen toupper(), og så sjekke om stringen er lik "OSLO" i steden. Du kan gjøre noe sånt som dette: #include <string> #include <cstring> std::string upper_string(std::string); int main() { // ... } void upper_string(std::string& s) { for (int i = 0; i < s.size(); i++) s[i] = toupper(s[i]); } Når det gjelder programmet generelt, bør du kanskje gi en bruker flere muligheter hvis vedkommende ikke skriver 'start'. Endret 21. februar 2004 av Myubi Lenke til kommentar
moesen Skrevet 21. februar 2004 Forfatter Del Skrevet 21. februar 2004 Feilen din er denne: if(hovedstad1 == "oslo"); { Ta bort semikolonet, du For å oppheve "case sensitivity" kan du skrive en funksjon som benytter seg av C-funksjonen toupper(), og så sjekke om stringen er lik "OSLO" i steden. Du kan gjøre noe sånt som dette: #include <string> #include <cstring> std::string upper_string(std::string); int main() { // ... } void upper_string(std::string& s) { for (int i = 0; i < s.size(); i++) s[i] = toupper(s[i]); } Når det gjelder programmet generelt, bør du kanskje gi en bruker flere muligheter hvis vedkommende ikke skriver 'start'. Takker! Skjønte ikke helt det du forklarte om case sensitivity, men takk! Jeg trenger litt hjelp med fortsettelsen på programmet, etter de har tastet enter skal ett nytt spørsmål komme opp, og slik skal det gå til alle hovedstatene er ramset opp og de er feil eller rette... Kan du hjelpe tror du? Lenke til kommentar
moesen Skrevet 21. februar 2004 Forfatter Del Skrevet 21. februar 2004 Fikk til fortsettelse nå, men hvordan får jeg til slik at hvis man får den erroren: cout << "Du skrev ikke 'start', pr0v igjen...\n"; til at programmet hoppet til starten igjen da? Lenke til kommentar
☀ ❄ Skrevet 21. februar 2004 Del Skrevet 21. februar 2004 Dersom jeg var deg ville jeg restrukturert programmet, til noe som dette: void questions(); void capitol(const std::string&, const std::string&); int main() { // Få kommando // Sjekk kommandoen // Hvis input er start, kall questions(); // Hvis input er hjelp, skriv informasjon om programmet // Hvis input er avslutt, avslutt. } void questions() { capitol("Norge", "Oslo"); capitol("Sverige","Stockholm"); } void capitol(const std::string& land, const std::string& hstad) { // Kode for å spørre om hovedstaden i et land, sjekke om // det er riktig, evt. også andre ting } For å oppklare litt om "case sensitiviteten" (vi trenger absolutt et godt ord for det på norsk): upper_string() gjør om string-argumentet til å ha bare store bokstaver. Altså blir oslO, oSLo, OSLO, oslo, Oslo osv gjort om til OSLO -- og da er det bare å sjekke om stringen er "OSLO". Lenke til kommentar
moesen Skrevet 22. februar 2004 Forfatter Del Skrevet 22. februar 2004 Gjorde om litt: #include <iostream> #include <string> #include <cstdlib> using namespace std; int main() { cout << "Velkommen til Hovedstad-programmet!\n"; cout << "--== Meny ==--\nSkriv 'start' for og begynne programmet\nSkriv 'hjelp' for hjelpemenyen\nSkriv 'avslutt' for og avslutte programmet\n"; string prg_start; cin >> prg_start; } if(prg_start == "start") { cout << "Velkommen, bla bla bla..."; system ("pause"); } else if(prg_start == "hjelp") { cout << "## Hovedstadprogrammet ##\n\nDette programmet er ett program som\n sp0r deg om hovedstader i forsjellige land.\nNaar sp0rsmaalet er stilt maa du skrive svaret\n du mener er rett, forsaa aa trykke paa enter.\n"; system ("pause"); } else if(prg_start == "avslutt"){ cout << "Du valgte og avslutte, vennligst trykk enter..."; system ("pause"); return(0); } Nå får jeg en masse error, mulig at compileren ikke er så ny at den støtter "system" kommandoen? Hva er feil i koden? void er en kommando jeg ikke er så kjent med, den virker praktisk... Hint hint Lenke til kommentar
☀ ❄ Skrevet 22. februar 2004 Del Skrevet 22. februar 2004 Innrykk er en fin bil. Hvis du tar ibruk det, ser koden din slik ut: #include <iostream> #include <string> #include <cstdlib> using namespace std; int main() { cout << "Velkommen til Hovedstad-programmet!\n"; cout << "--== Meny ==--\n"; cout << "Skriv 'start' for og begynne programmet\n"; cout << "Skriv 'hjelp' for hjelpemenyen\n"; cout << "Skriv 'avslutt' for aa avslutte programmet\n"; string cmd; cin >> cmd; } if(cmd == "start") { cout << "Velkommen, bla bla bla..."; system ("pause"); } else if(cmd == "hjelp") { cout << "## Hovedstadprogrammet ##\n\n"; cout << "Dette programmet er et program som\n"; cout << "sp0r deg om hovedstader i forsjellige land.\n"; cout << "Naar sp0rsmaalet er stilt maa du skrive svaret\n"; cout << "du mener er rett, for saa aa trykke paa enter.\n"; system("pause"); } else if(cmd == "avslutt") { cout << "Du valgte og avslutte, vennligst trykk enter..."; system("pause"); return(0); } Da ser du vel ganske fort et par feil? Jeg gjorde et par endringer i koden din, for å gjøre den litt klarere. For det første gjorde jeg så hver linje output har sin egen cout-statement. Jeg ga også prg_start et nytt og mer passende navn - cmd (command). void betyr "ingenting" (som ironisk nok også er "alt" når det er snakk om pekere, men det kommer du vel til senere). void questions(); er deklarasjonen (erklæringen?) til en funksjon questions som ikke tar noen argumenter og som ikke returnerer noe (void). Jeg foreslår at du leser mer om funksjoner i boka di PS: system() er en standard del av C-bibliotek-delen av Standard C++-biblioteket, så kompilatoren din vet nok godt hva det er. I dette tilfellet er det noe annet som er feil i koden din. 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å