Avatar billede cmau Nybegynder
30. september 2005 - 11:53 Der er 28 kommentarer og
1 løsning

Sender videre til næste opgave

Hejsa

Jeg har fået lavet lidt C++, en slags opgave system, men nu kan jeg ikke lige kommer videre. Det skal være sådan at når man har svaret rigtig skal man sendes til næste opgave.

KOde:

#include <stdio.h>

int a;

int main()
{
    do
    {
        printf("Opgave 1: Hvad er 98 gange 34?\n\nSkriv svaret:\n");
        scanf("%d", &a);

        if(a == 3332)
        {
            printf("\nRigtigt!\nVidere til næste opgave..\n\n________________________________________________________________________________\n\n");

        } else {
             
            printf("\nForkert!\nOm igen..\n\n\a\a________________________________________________________________________________\n\n");
           
        }
       
    }while (1);
       
}

Et andet stort problem er at man kan skrive bogstaver når svaret kun må være tal. Kan dette laves så man kun kan skive tal? Hvis jeg så senere laver opgaver med tekst skal jeg å selv kunne vælge om man må skrive tal, tegn, bogstaver. 2 af dem sammen eller dem alle 3 på en gang.
Avatar billede arne_v Ekspert
30. september 2005 - 12:06 #1
hvis du indlæser en string og bruger strtol til at konvertere til int kan du checke
på om det er et tal
Avatar billede arne_v Ekspert
30. september 2005 - 12:07 #2
kode snippet:

  v = strtol(s, &ep, 10);
  if(ep > s)
  {
      printf("%s = %d\n",s,v);
  }
  else
  {
      printf("%s not number\n",s);
  }
Avatar billede arne_v Ekspert
30. september 2005 - 12:07 #3
char *s;
  int v;
  char *ep;
Avatar billede cmau Nybegynder
30. september 2005 - 13:28 #4
Jeg må altså indrømme at jeg ikke har megen forstand på C++ endnu, så kunne du tænke dig at smide det sammen også skrive hvilke ting der gør hvad, på et let dansk, ikke alle de "svære ord"
Avatar billede arne_v Ekspert
30. september 2005 - 15:31 #5
jeg kunne godt prøve og flette det ind i dit program
Avatar billede arne_v Ekspert
30. september 2005 - 15:38 #6
#include <stdio.h>

int main()
{
    int a;
    int ok;
    char s[33],*ep;
    do
    {
        ok = 0;
        printf("Opgave 1: Hvad er 98 gange 34? ");
        fgets(s,sizeof(s),stdin);
        a = strtol(s, &ep, 10);
        if(ep > s)
        {
            if(a == 3332)
            {
                printf("Rigtigt!\n");
                ok = 1;
            } else {
                printf("Forkert!\n");
            }
        }
        else
        {
            printf("Ikke et tal\n",s);
        }
    } while (!ok);
    printf("Næste opgave\n");
    return 0;     
}
Avatar billede cmau Nybegynder
02. oktober 2005 - 15:57 #7
Får fejl i linje 13 :/

Men vil du ikke prøve at give en forklaring på hvad de forskellige ting gør, så jeg kommer lidt mere ind i det?
Avatar billede arne_v Ekspert
02. oktober 2005 - 16:18 #8
tilføj

#include <stdlib.h>

øverst
Avatar billede arne_v Ekspert
02. oktober 2005 - 16:19 #9
hvad er du i tvivl om ?
Avatar billede cmau Nybegynder
02. oktober 2005 - 16:37 #10
Når man skriver det rigtige lukker programmet :S
Avatar billede cmau Nybegynder
02. oktober 2005 - 16:37 #11
men jeg er i tvivl om hvad sådan noget som char s[33],*ep; betyder.
Avatar billede arne_v Ekspert
02. oktober 2005 - 16:41 #12
char s[33],*ep;

betyder at vi har en variabel s som er et char array af dimension 33 og
en variabel ep som er en pointer til char
Avatar billede cmau Nybegynder
02. oktober 2005 - 17:12 #13
Dvs. at char bare siger at der skal beskrives en variabel?.. Hvad betyder "af dimension 33"? Og hvad betyder "ep som er en pointer"
Avatar billede arne_v Ekspert
02. oktober 2005 - 17:23 #14
nej char en en type af variabel

en char kan indeholde et bogstav

en int kan indeholde et heltal

etc.
Avatar billede arne_v Ekspert
02. oktober 2005 - 17:24 #15
et array af dimension 33 betyder at der er 33 pladser i dette tilfælde 33 bogstaver
(teknisk set kun 32 bogstaver og en slut markering)
Avatar billede cmau Nybegynder
02. oktober 2005 - 17:28 #16
Okay så blev jeg det klogere :)

Hvad så med det *ep?
Avatar billede arne_v Ekspert
02. oktober 2005 - 17:30 #17
det er en pointer til char

strtol sætter den til at pege på det første tegn som ikke er et ciffer

og hvis den peger på starten af strengen så er der derfor slet ikke noget
tal i strengen
Avatar billede cmau Nybegynder
02. oktober 2005 - 17:37 #18
okay..

Men jeg har stadig et problem med at den lukker programmet ned når jeg skriver det rigtige facit.
Avatar billede arne_v Ekspert
02. oktober 2005 - 17:40 #19
ville du ikke det ?
Avatar billede arne_v Ekspert
02. oktober 2005 - 17:40 #20
du vil til næste opgave men da den ikke er der så afslutter programmet jo
Avatar billede cmau Nybegynder
02. oktober 2005 - 17:44 #21
nå okay..

Er det så bare det her jeg skal kopirer ind under der hvor den skriver næste opgave?

    do
    {
        ok = 0;
        printf("Opgave 1: Hvad er 98 gange 34? ");
        fgets(s,sizeof(s),stdin);
        a = strtol(s, &ep, 10);
        if(ep > s)
        {
            if(a == 3332)
            {
                printf("Rigtigt!\n");
                ok = 1;
            } else {
                printf("Forkert!\n");
            }
        }
        else
        {
            printf("Ikke et tal\n",s);
        }
    } while (!ok);
Avatar billede arne_v Ekspert
02. oktober 2005 - 17:52 #22
det skal sættes ind som erstatning for

printf("Næste opgave\n");
Avatar billede cmau Nybegynder
02. oktober 2005 - 18:10 #23
oK!! nu virker det :D.. men kan man ikke gøre sådan at man kan skrive æøå?..

Nu ser min kode ud som nedenstående, så vil jeg gerne have den til at spørge om navn også smide det i highscore.dat også efter man har skrevet navn viser den highscoren, men ved ikke lige hvordan det foregår i c++, kan du evt hjælpe med det?

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

int main()
{
    int a;
    int ok;
    int count;
    char s[33],*ep;
    count = 0;
    do
    {
        ok = 0;
        printf("Opgave 1: Hvad er 5 gange 6?\n\nSkriv svaret:\n");
        fgets(s,sizeof(s),stdin);
        a = strtol(s, &ep, 10);
        if(ep > s)
        {
            if(a == 30)
            {
                printf("\nRigtigt!\nVidere til næste opgave..\n\n________________________________________________________________________________\n\n");
                ok = 1;
            } else {
                printf("\nForkert!\nOm igen..\n\n\a________________________________________________________________________________\n\n");
                count++;
            }
        }
        else
        {
            printf("\nDu skal skrive et tal!\n\n\a________________________________________________________________________________\n\n",s);
        }
    } while (!ok);
    do
    {
        ok = 0;
        printf("Opgave 2: Hvad er 11 gange 7?\n\nSkriv svaret:\n");
        fgets(s,sizeof(s),stdin);
        a = strtol(s, &ep, 10);
        if(ep > s)
        {
            if(a == 77)
            {
                printf("\nRigtigt!\nVidere til næste opgave..\n\n________________________________________________________________________________\n\n");
                ok = 1;
            } else {
                printf("\nForkert!\nOm igen..\n\n\a________________________________________________________________________________\n\n");
                count++;
            }
        }
        else
        {
            printf("\nDu skal skrive et tal!\n\n\a________________________________________________________________________________\n\n",s);
        }
    } while (!ok);
    printf("\nTillykke!! Du har nu bestået Matx 1.0 af WooX\n\nAntal forkerte: %d\n\n",count);
    system ("PAUSE");
    return 0;     
}
Avatar billede arne_v Ekspert
02. oktober 2005 - 19:31 #24
ÆØÅ er bare et spørgsmål om at du får skrevet dem i CodePage-850 tegnsættet
Avatar billede arne_v Ekspert
02. oktober 2005 - 19:31 #25
highscore ?

prøv og læs på fopen, fclose, fgets og fputs !
Avatar billede arne_v Ekspert
02. oktober 2005 - 19:31 #26
og et svar
Avatar billede cmau Nybegynder
02. oktober 2005 - 23:27 #27
Kan du link til noget så jeg kan læse om CodePage-850 tegnsættet?

Men tusind tak!!
Avatar billede arne_v Ekspert
02. oktober 2005 - 23:39 #28
du kan skrive dine ÆØÅ med f.eks. DOS edit

eller du kan sætte de rigtige hex koder ind - se http://www.kostis.net/charsets/cp850.htm

eller du kan konvertere
Avatar billede arne_v Ekspert
02. oktober 2005 - 23:39 #29
for konvertering se denne kode:

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

//**********************************************************************
//
// (ISO-8859-1/IsoLatin1/CP-819 -> CP-850/PC-8-ML) conversion
//
// Notes:
//  0-127 left unchanged
//  128-255 converted (to zero if no equivalence)
//
//**********************************************************************

unsigned char cscvt_to_cp850_table[256] = {
  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111,
112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
  0,173,189,156,207,190,221,245,249,184,166,174,170,240,169,238,
248,241,253,252,239,230,244,250,247,251,167,175,172,171,243,168,
183,181,182,199,142,143,146,128,212,144,210,211,222,214,215,216,
209,165,227,224,226,229,153,158,157,235,233,234,154,237,231,225,
133,160,131,198,132,134,145,135,138,130,136,137,141,161,140,139,
208,164,149,162,147,228,148,246,155,151,163,150,129,236,232,152
};

void cscvt_to_cp850(char *s1,char *s2)
{
  int i;
  strcpy(s2,s1);
  for(i=0;i<(int)strlen(s1);i++) s2[i]=cscvt_to_cp850_table[(unsigned char)s2[i]];
  return;
}

int main()
{
  char win[] = "ABCabcÆØÅæøå123";
  char dos[100];
  cscvt_to_cp850(win,dos);
  printf("%s -> %s\n",win,dos);
}
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