Avatar billede the_party_dog Nybegynder
07. maj 2002 - 12:30 Der er 6 kommentarer og
1 løsning

Videre forløb, med at kommer igang

Jeg har nu modtaget en stor hjælpende hånd fra chries, og nu virker det os, men nu har jeg et lille spørgsmål. Den kode som chries har lavet, ser sådan her ud:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

int main(int argc, char* argv[])
{
    srand( (unsigned)time( NULL ) );

    int random = rand()%6 + 1;
   
    char colors[6][40] = { "red", "white", "black", "blue", "green", "yellow" };
   
    int end = 0;
   
    char input[128];

    while( !end )
    {
        printf( "guess color: " );
        scanf( "%s", input );

        if( strcmp( colors[random], input ) == 0 )
        {
            end = 1;
            printf( "correct\n");
        }
        else
        {
            printf( "not correct\n");
        }
    }

    return 0;
}

Den virker os perfekt som den skal, den gør at man skal blive ved med at skrive indtil man rammer rigtig med sit gæt. Men jeg har altså brug for 4 gange at gætte, men det nytter ikke noget at jeg først gætter den første, og så den anden, og bagefter den 3, og 4. Jeg har brug for at den spørger om den første én gang, og lige så med nr 2, 3 og 4, først derefter skal den starte forfra, og sige hvilke der var forkert. Det skal virke som et mastermind spil....
Avatar billede jpk Nybegynder
07. maj 2002 - 12:36 #1
skift dette:

  while( !end )
    {
        printf( "guess color: " );
        scanf( "%s", input );

        if( strcmp( colors[random], input ) == 0 )
        {
            end = 1;
            printf( "correctn");
        }
        else
        {
            printf( "not correctn");
        }
    }


ud med:

    int end = 4;
    char input[128];
int nCorrect=0, nWrong=0;
  while(end--)
    {
        printf( "guess color: " );
        scanf( "%s", input );

        if( strcmp( colors[random], input ) == 0 )
        {
            nCorrect++;
        }
        else
        {
            nWrong++;
        }
    }

og skriv så værdierne ud
Avatar billede the_party_dog Nybegynder
07. maj 2002 - 12:51 #2
hmmmm, du er gjort det rigtig nok, jeg har ikke formuleret mig godt nok! Undskyld, det vil jeg lige se om jeg kan lave om på med et eks.

printf("Gæt farve 1");
scanf("%s, f1);

printf("Gæt farve2");
scanf("%s", f2);

printf("gæt farve3");
scanf("%s", f3);

printf("Gæt farve4");
scanf("%s", f4);

nu har man taste 4 farver ind, og det er her jeg ikke kan se hvad jeg skal gøre for at den skriver hvilke der var rigtige, og hvilke der var forkerte, og sørger for at det hele kører igen, så man blive ved, til man har gættet de 4 forskellige farver.... Håber det var bedre formuleret.
Avatar billede chries Nybegynder
07. maj 2002 - 12:55 #3
nu kan jeg ikke helt reglerne, men det kan du jo bare kode :-) mener du noget som det her:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

char colors[6][40] = { "red", "white", "black", "blue", "green", "yellow" };

int TestColorCorrect( char random_color[], char user_color[] )
{
    if( strcmp( random_color, user_color ) == 0 )
    {
        return 1;
    }

    return 0; // not correct
}

int TestColorPresent( int random[], char user_color[] )
{
    int present = 0;
   
    for( int i=0; i<4; i++ )
    {
        if( strcmp(colors[random[i]], user_color ) == 0 )
        {
            present++;
        }
    }

    return present; // no color present
}

int main(int argc, char* argv[])
{

    srand( (unsigned)time( NULL ) );

    int random[4];
   
    random[0] = rand()%6 + 1;
    random[1] = rand()%6 + 1;
    random[2] = rand()%6 + 1;
    random[3] = rand()%6 + 1;
     
    int end = 0;
   
    char input[4][128];

    int correct = 0, guesses = 0;
    int present = 0;

    while( !end )
    {
        printf( "guess color 1: " );
        scanf( "%s", input[0] );

        printf( "guess color 2: " );
        scanf( "%s", input[1] );

        printf( "guess color 3: " );
        scanf( "%s", input[2] );

        printf( "guess color 4: " );
        scanf( "%s", input[3] );

        correct = TestColorCorrect(colors[random[0]],input[0] )
                + TestColorCorrect(colors[random[1]],input[1] )
                + TestColorCorrect(colors[random[2]],input[2] )
                + TestColorCorrect(colors[random[3]],input[3] );

        present = TestColorPresent(random,input[0] )
                + TestColorPresent(random,input[1] )
                + TestColorPresent(random,input[2] )
                + TestColorPresent(random,input[3] );

        if( correct == 4 )
        {
            printf( "you won in %i guesses\n", guesses );       
            end = 1;
        }
        else
        {
            printf( "There are %i colors placed correct\n", correct );                               
            printf( "There are %i colors present in them you guessed with\n", present );                               
        }


        guesses++;
    }

    return 0;
}
Avatar billede chries Nybegynder
07. maj 2002 - 12:56 #4
TestColorPresent regner ikke helt rigtig, hvis man skriver 4x hvid og der er to hvide i de tilfældige regner den 8 ud :-)
Avatar billede chries Nybegynder
07. maj 2002 - 13:18 #5
den her regner mere rigtig :-)

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>

char colors[6][40] = { "red", "white", "black", "blue", "green", "yellow" };

int TestColorCorrect( char random_color[], char user_color[] )
{
    if( strcmp( random_color, user_color ) == 0 )
    {
        return 1;
    }

    return 0; // not correct
}

int TestColorPresent( int random[], char user_color1[], char user_color2[], char user_color3[], char user_color4[] )
{
    int present = 0, i=0;
    int counted[4] = { 0,0,0,0 };
   
    for( i=0; i<4; i++ )
    {
        if( (strcmp(colors[random[i]], user_color1 ) == 0) && !counted[i] )
        {
            present++;
            counted[i] = 1;
        }
    }

    for( i=0; i<4; i++ )
    {
        if( (strcmp(colors[random[i]], user_color2 ) == 0) && !counted[i] )
        {
            present++;
            counted[i] = 1;
        }
    }

    for( i=0; i<4; i++ )
    {
        if( (strcmp(colors[random[i]], user_color3 ) == 0) && !counted[i] )
        {
            present++;
            counted[i] = 1;
        }
    }

    for( i=0; i<4; i++ )
    {
        if( (strcmp(colors[random[i]], user_color4 ) == 0) && !counted[i] )
        {
            present++;
            counted[i] = 1;
        }
    }

    return present;
}

int main(int argc, char* argv[])
{

    srand( (unsigned)time( NULL ) );

    int random[4];
   
    random[0] = rand()%6 + 1;
    random[1] = rand()%6 + 1;
    random[2] = rand()%6 + 1;
    random[3] = rand()%6 + 1;
     
    int end = 0;
   
    char input[4][128];

    int correct = 0, guesses = 1;
    int present = 0;

    while( !end )
    {
        printf( "guess color 1: " );
        scanf( "%s", input[0] );

        printf( "guess color 2: " );
        scanf( "%s", input[1] );

        printf( "guess color 3: " );
        scanf( "%s", input[2] );

        printf( "guess color 4: " );
        scanf( "%s", input[3] );

        correct = TestColorCorrect(colors[random[0]],input[0] )
                + TestColorCorrect(colors[random[1]],input[1] )
                + TestColorCorrect(colors[random[2]],input[2] )
                + TestColorCorrect(colors[random[3]],input[3] );

        present = TestColorPresent(random,input[0], input[1], input[2], input[3] );

        if( correct == 4 )
        {
            printf( "you won in %i guesses\n", guesses );       
            end = 1;
        }
        else
        {
            printf( "Guess %i\n", guesses );                               
            printf( "  There are %i colors placed correct\n", correct );                               
            printf( "  There are %i colors present in them you guessed with\n", present );                               
        }


        guesses++;
    }

    return 0;
}
Avatar billede the_party_dog Nybegynder
07. maj 2002 - 14:42 #6
CHRIES! Du er for VILD til det der lort! Det var lige sådan det hele skulle være! Der er lidt som skal rettes, men det har jeg gjort! Tak for det!
Avatar billede chries Nybegynder
07. maj 2002 - 14:47 #7
der er vist en fejl

    random[0] = rand()%6 + 1;
    random[1] = rand()%6 + 1;
    random[2] = rand()%6 + 1;
    random[3] = rand()%6 + 1;

skal ændres til

    random[0] = rand()%6;
    random[1] = rand()%6;
    random[2] = rand()%6;
    random[3] = rand()%6;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester