Gå til innhold

Parse error i program


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Myubi
Lenke til kommentar
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

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

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 :p

Lenke til kommentar

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

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å
×
×
  • Opprett ny...