Avatar billede xhofa Nybegynder
08. februar 2005 - 13:00 Der er 3 kommentarer og
1 løsning

Udlaes medlem fra struct vha pointer.

Først får i lige mit program.

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


void indtastmedlem();
void udskrivmedlem();


struct medlemmer
{
        int medlemsnr;
        char navn[60];
        char gadenavn[60];
        char postnr[60];
        char by[60];
        char tlfnr[60];
        char mobil[60];
        char email[60];

};

void writeStruct(struct medlemmer *pMedlem)
{
    FILE *file;
    file = fopen("c:\\testfil.txt", "a");
    fwrite(pMedlem, sizeof(struct medlemmer), 1, file);
    fclose(file);
}

/*
struct medlemmer* readStruct()
{
    struct Test *temp = (struct Test*)malloc(sizeof(struct Test));
    FILE *file;
    file = fopen("data/struct.txt", "r");
    fread(temp, sizeof(struct Test), 1, file);
    fclose(file);
    return temp;
}
*/

void printStruct(struct medlemmer *pMedlem)
{
    printf("struct:\n");
    printf("\tNavn: %s\n", pMedlem->navn);
    printf("\tMedlemsnummer: %d\n", pMedlem->medlemsnr);

   



}


void main()
{
int valg;
do {
    printf("Hvad vil du:\n\n");
    printf("[1] Indtast medlem\n[2] Udkskriv medlem\n[3] Afslut program\n");
    scanf("%d", &valg);

    switch (valg)
        {
            case 1:
                indtastmedlem();
                break;
            case 2:
                udskrivmedlem();
                break;
            case 3:
                exit(0);
                break;
            default:
                printf("Du tastede forkert, vaelg enten [1], [2], [3] eller [4]\n");
            break;
        }
    }

    while(valg != 1 && valg != 2);
   
}


void indtastmedlem()
{

FILE *fp;

int n = 0;






struct medlemmer *pMedlem = (struct medlemmer*)malloc(sizeof(struct medlemmer));
   
       
    if( (fp=fopen("c:\\testfil.txt", "r"))==NULL)
        printf("Kan ikke aabne filen.\n");
    else
        {
        while( fread(&*pMedlem, sizeof(pMedlem[n]), 1, fp) ==1 )
   
            {
            //printf("Navn: %s", pMedlem ->navn);
            n++;
            }
        }



do
{
       
        struct medlemmer *pMedlem = (struct medlemmer*)malloc(sizeof(struct medlemmer));
        printf("Det nuvaerende antal medlemmer er: %d\n", n);
        pMedlem->medlemsnr = ++n;


        printf("Indtast navn: ");
        fflush(stdin);                                        //Sørger for at den ikke skriver "Indtast navn" og "Indtast gadenavn..." oven i hinanden.
        gets(pMedlem -> navn);

        printf("Indtast gadenavn og husnummer: ");
        //fflush(stdin);
        gets(pMedlem -> gadenavn);

        printf("Indtast postnummer: ");
        //fflush(stdin);
        gets(pMedlem -> postnr);

        printf("Indtast by: ");
        //fflush(stdin);
        gets(pMedlem -> by);

        printf("Indtast telefonnummer: ");
        //fflush(stdin);
        gets(pMedlem -> tlfnr);

        printf("Indtast mobilnummer: ");
        //fflush(stdin);
        gets(pMedlem -> mobil);

        printf("Indtast email: ");
        //fflush(stdin);
        gets(pMedlem -> email);



   
    printStruct(pMedlem);
    writeStruct(pMedlem);
   

    free(pMedlem);

    printf("Vil du skrive flere medlemmer ind? Tast blot 'j' IKKE efterfulgt af Enter.\n");
   
   
}
while(getch() == 'j');

    //pMedlem = readStruct();
    //printStruct(pMedlem);

    return;
}



/**alt herunder virker ikke endnu**/
void udskrivmedlem()

{
    FILE *filepointer;
    int n = 0;

    struct medlemmer *pMedlem = (struct medlemmer*)malloc(sizeof(struct medlemmer));
   
    printf("Udskriv medlemsnummeret paa det medlem du oensker at udskrive: %d\n", n);
    scanf("%d", &n);

    pMedlem->medlemsnr = n;

    if( (filepointer=fopen("c:\\testfil.txt", "r"))==NULL)
        printf("Kan ikke aabne filen.\n");
    else
        {
       
        while( fread(&*pMedlem, sizeof(pMedlem[n]), 1, filepointer) ==1 );

    }

   
    printf("Navn: %s", pMedlem[n].navn);

}

Blot se bort fra alt slamkoden :D

Er der nogen der kan fortælle mig, hvad jeg skal gøre for at få skrevet f.eks. Medlem nr 2 ud?

Det eneste jeg kan få skrevet ud fra filen, er det nyeste indtastede medlem.
Avatar billede bertelbrander Novice
08. februar 2005 - 23:39 #1
Man kunne forestille sig noget i stil med følgende. Teknikken er at læse et medlem af gangen indtil den rigtige er fundet.

void udskrivmedlem()

{
    FILE *filepointer;
    int n = 0;

    struct medlemmer *pMedlem = (struct medlemmer*)malloc(sizeof(struct medlemmer));

    printf("Udskriv medlemsnummeret paa det medlem du oensker at udskrive: %d\n", n);
    scanf("%d", &n);

    if( (filepointer=fopen("c:\\testfil.txt", "r"))==NULL)
    {
        printf("Kan ikke aabne filen.\n");
        return;
    }
    else
    {

        while( fread(pMedlem, sizeof(struct medlemmer), 1, filepointer) ==1 &&
              pMedlem->medlemsnr != n);

        if(pMedlem->medlemsnr == n)
        {
          printf("Navn: %s", pMedlem->navn);
        }
        else
        {
          printf("Medlems Nr: %d ikke fundet\n", n);
        }
    }
    free(pMedlem);
    fclose(filepointer);
}
Avatar billede xhofa Nybegynder
09. februar 2005 - 09:20 #2
åhhh... mange mange tak, kommer du ikke lige med et svar?
Avatar billede bertelbrander Novice
09. februar 2005 - 19:50 #3
Nej, jeg samler ikke på point.
Avatar billede xhofa Nybegynder
21. november 2005 - 11:21 #4
svar
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