Avatar billede xhofa Nybegynder
03. februar 2005 - 15:23 Der er 3 kommentarer og
1 løsning

Hvorfor skriver den 2 linjer ud?

Jeg skriver lige hele min kode ind, jeg ved ikke om det hjælper jer med noget. Ved godt min programmering nok ikke er verdens bedste, men man skal jo starte et sted :D

---------------------------------------------------------
#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);
}


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 )
   
            {
            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: ");
        gets(pMedlem -> navn);
        printf("Indtast gadenavn og husnummer: ");
        gets(pMedlem -> gadenavn);
        printf("Indtast postnummer: ");
        gets(pMedlem -> postnr);
        printf("Indtast by: ");
        gets(pMedlem -> by);
        printf("Indtast telefonnummer: ");
        gets(pMedlem -> tlfnr);
        printf("Indtast mobilnummer: ");
        gets(pMedlem -> mobil);
        printf("Indtast email: ");
        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');

    return 0;
   
}

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");
    else
        {
       
        while( fread(&*pMedlem, sizeof(pMedlem[n]), 1, filepointer) ==1 );

    }
   
    printf("Navn: %s", pMedlem->navn);

}
---------------------------------------------------------

Mit problem er så det, at når jeg kommer til dette sted i mit program:
        printf("Indtast navn: ");
        gets(pMedlem -> navn);
        printf("Indtast gadenavn og husnummer: ");

Så skriver den "Indtast navn: Indtast gadenavn og husnummer:"
altså den skriver de to linjer lige efter hinanden. Det der så gør at jeg bliver endnu mere forvirret er at den gør det rigtig nok hvis jeg vælger at køre programmet igennem lige efter igen.


mvh
Robert.

PS. Jeg ved godt at menupunkt to ikke virker endnu, men det problem skal jeg nok kigge på senere :D
Avatar billede jpk Nybegynder
03. februar 2005 - 15:31 #1
prøve at bruge fflush(stdin); før du kalder gets
Avatar billede xhofa Nybegynder
03. februar 2005 - 15:35 #2
det virkede, mange mange tak :D

kommer du lige med et "svar"?
Avatar billede jpk Nybegynder
03. februar 2005 - 15:37 #3
okay...
Avatar billede bertelbrander Novice
03. februar 2005 - 17:41 #4
Jeg citerer lige C-standarden igen:

"7.19.5.2 The fflush function
Synopsis
#include <stdio.h>
int fflush(FILE *stream);
Description
If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined."

Så det "virker" altså ved et tilfælde, og vil måske ikke virke på naboens PC/kompiler/linux-box/...

Læsningen er at bruge fgets ved alle læsninger.
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