Avatar billede vostrikov Nybegynder
07. april 2004 - 11:30 Der er 11 kommentarer og
1 løsning

Nybegynder har brug for hjælp til C-program

Jeg er lige startet på C-programmering og kan ikke finde fejlen i mit prog. Det er et cpr-program. Fortæller hvilken dato/år du er født. Det skulle også vise, om man er han/hunkøn. meeeen det funker sgu ikke... Nogle der gider kigge på lortet :)

Mit program:

#include <stdio.h>
#include <conio.h>

void main(void)


{
    char cpr[11];

    clrscr();

    printf("Indtast dit CPR-nummer : ");
    scanf("%s", & cpr);
    printf("\n%s", cpr);



    if (cpr[0] > 47 && cpr[0] < 52 && cpr[1] > 47 && cpr[1] < 58)
    {
    printf("\nDu er f›dt d. %c%c.", cpr[0], cpr[1]);
    }
    else
    {
    printf("\nUgyldig Dato!");
    }


    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 48 && cpr[3] < 50)
    {
    printf(" Januar" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 49 && cpr[3] < 51)
    {
    printf(" Februar" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 50 && cpr[3] < 52)
    {
    printf(" Marts" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 51 && cpr[3] < 53)
    {
    printf(" April" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 52 && cpr[3] < 54)
    {
    printf(" Maj" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 53 && cpr[3] < 55)
    {
    printf(" Juni" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 54 && cpr[3] < 56)
    {
    printf(" Juli" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 55 && cpr[3] < 57)
    {
    printf(" August" );
    }

    if (cpr[2] > 47 && cpr[2] < 49 && cpr[3] > 56 && cpr[3] < 58)
    {
    printf(" September" );
    }

    if (cpr[2] > 48 && cpr[2] < 50 && cpr[3] > 47 && cpr[3] < 49)
    {
    printf(" Oktober" );
    }

    if (cpr[2] > 48 && cpr[2] < 50 && cpr[3] > 48 && cpr[3] < 50)
    {
    printf(" November" );
    }

    if (cpr[2] > 48 && cpr[2] < 50 && cpr[3] > 49 && cpr[3] < 51)
    {
    printf(" December" );
    }

    if (cpr[2] > 49 )

    {
        if (cpr[3] == 51 && 53 && 55 && 57)
        {
        printf("\nUgyldig dato");
        }
    }

    if (cpr[4] > 47 && cpr[4] < 58 && cpr[5] > 47 && cpr[5] < 58)
    {
    printf(" 19%c%c", cpr[4], cpr[5]);
    }




    if (cpr[10] == 49 && 51 && 53 && 55 && 57)
    {
    printf("\nog du er en Mand" );
    }
    else
    {
    printf("\nog du er en Kvinde" );
    }
   


    getch();

}
Avatar billede phineas_phreak Nybegynder
07. april 2004 - 11:33 #1
hvad siger din compiler ?
Avatar billede arne_v Ekspert
07. april 2004 - 11:37 #2
if (cpr[0] > 47 && cpr[0] < 52 && cpr[1] > 47 && cpr[1] < 58)

->

if (cpr[0] >= '0' && cpr[0] <= '3' && cpr[1] >= '0' && cpr[1] <= '9')

etc. vil gøre koden meget mere læselig

-----

if (cpr[10] == 49 && 51 && 53 && 55 && 57)

->

if (cpr[10]=='1' || cpr[10]=='3' || cpr[10]=='5' || cpr[10]=='7' || cpr[10]=='9')

virker men smartere er nok

if (cpr[10] % 2 == 1)
Avatar billede vostrikov Nybegynder
07. april 2004 - 12:15 #3
Til arne_v:

Forklar mig lige den sidste linie der:
if (cpr[10] % 2 == 1)

Er lige begyndt på C i mandags :)
Avatar billede arne_v Ekspert
07. april 2004 - 12:17 #4
hvis sidste ciffer modolus 2 (rest ved division med 2) er 1
Avatar billede vostrikov Nybegynder
07. april 2004 - 12:26 #5
Er det pinligt, at bede om et mere hmm... forstående svar ;)

?
Avatar billede vostrikov Nybegynder
07. april 2004 - 13:02 #6
Nånå.. så blev man fornærmet :) ?
Avatar billede arne_v Ekspert
07. april 2004 - 13:09 #7
Jeg er ikke fornærmet, men jeg har jo også et arbejde at passe.
Avatar billede vostrikov Nybegynder
07. april 2004 - 13:10 #8
Hehe... Det er så i orden. Mente det du for sjovt.
Avatar billede arne_v Ekspert
07. april 2004 - 13:12 #9
Hvis du laver division med 2 finder at at:

tal    resulatet ved div 2        rest ved div 2
0                0                      0
1                0                      1
2                1                      0
3                1                      1
4                2                      0
5                2                      1
6                3                      0
7                3                      1
8                4                      0
9                4                      1
Avatar billede arne_v Ekspert
07. april 2004 - 13:14 #10
% er modulus operatoren som altså er rest ved division

og det betyder at x % 2 returnerer 1 for ulige tal og 0 for lige tal
Avatar billede vostrikov Nybegynder
07. april 2004 - 13:28 #11
Mange tak for hjælpen. Og god påske... Du har fået points, rigth?

Har ikke den her side så meget :)
Avatar billede arne_v Ekspert
07. april 2004 - 13:38 #12
Jeg har fået point - tak
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