Permalänk
Medlem

Problem med c++

Jag sitter här och pillar med ett simpelt hänga gubbe-spel (mitt första spel faktiskt ) men såklart så krånglar det.

Jag försöker få en utskrift med frågetecken med inget händer... Det verkar inte vara ett syntax-fel eftersom programmet körs "normalt", så det lutar enligt mig åt ett logiskt fel någonstans i koden, jag behöver bara hjälp att hitta felet. Här är koden:

//Hänga gubbe
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int antal;
char ordet[20];

void presentation();
void ordlista(char ord[]);
int antalBokstaver();
void fyllFalt(int antal);

int main()
{
presentation();
ordlista(ordet);
antal = antalBokstaver();
fyllFalt (antal);

return 0;
}

void presentation()
{
cout << "H\x84nga gubbe - v 0.1" << endl << endl;
}

void ordlista(char ord[])
{
srand(time(0));
int a = rand()%2 + 1;

if (a == 1) {
ord = "programmera"; }
else if (a == 2) {
ord = "playstation"; }
}

int antalBokstaver()
{
char test[] = "test";

for (int i; ordet[i] != test[4]; i++) {
antal++; }

return antal;
}

void fyllFalt (int antal)
{
for (int i = 0; i < antal; i++) {
cout << " ?"; }
}

(anledningen till att jag gjorde fältet test var för att jag inte lyckades skriva nolltecknet i en vanlig char variabel, finns säkert ett mycket bättre sätt, men detta var det enda jag kunde komma på!)

Visa signatur

[Piikmiin]

Permalänk
Medlem

Eftersom ordet är en global variabel så behöver du inte skicka den som argument till ordlista. Du kan ändå komma åt den inifrån funktionen.
Du kan inte tilldela char-arrayer värden på det sättet du gör i ordlista. Använd strcpy istället. Det blir då

void ordlista(char ord[]) { srand(time(0)); int a = rand()%2 + 1; if (a == 1) strcpy(ord, "programmera"); else if (a == 2) strcpy(ord, "playstation"); }

I antalBokstaver ger du inte 'i' något värde. Det räknas därför inte från första elementet av ordet, utan var det blir är odefinierat. Ger du 'i' värdet 0 så räknas det rätt. Jag rekommenderar dig dock att använda funktionen strlen istället. Det blir då

int antalBokstaver() { return strlen(ordet); }

Ett annat tips är att använda string-klassen istället för char-arrayer. Det kan göra det ganska mycket enklare.

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem

tack så hemskt mycket, vad tänkte jag på, klart man använder srtlen.

Visa signatur

[Piikmiin]