Avatar billede kbhadsten Nybegynder
04. november 2004 - 08:19 Der er 7 kommentarer og
1 løsning

program afslutter uden return 0 kommado!

Hej Eksperten.dk

Jeg har fundet en programkode her på siden som gør man kan læse indholdet af en fil ind i et array. Dette virker også fint og jeg har fået den fjerne den \n som den indsætter ved hvert linieskift i txt filen da læser data fra.

Men nu er programmet begyndt at afslutte uden at vente på et tastetryk, og det afslutter også selvom jeg fjerner return 0;

Er der nogen der kan forklarer mig hvorfor den er begyndt på det!!

<!--------------- Program kode: --------------->

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

using namespace std;

struct Kunde
  {
  char nummer[256];
  char navn[256];
  char adresse[256];
  };

int main()
  {
  int index = 0;
  Kunde kunde[100]; //array med plads til 100 kunder
 
  FILE *fil; //FILE er et handle
  fil = fopen("kunder.txt", "rt");

  if(!fil) // Tjekker om fopen er true
    {
    return -1;
    }
 
  // Henter data fra fil og lægger det i array
  while(!feof(fil))
    {
    fgets(kunde[index].nummer, 256, fil); //tallet er "max number of bytes to be read."
    fgets(kunde[index].navn, 256, fil);
    fgets(kunde[index].adresse, 256, fil);
    index++;
    }
  fclose(fil);

  //nu indeholder index det antal Kunder der er læst.
  char brugerInput[3];
  cin >> brugerInput;
  for (int i = 0; i <= index; i++)
    {
    char convKunde[3];
    strncpy(convKunde,kunde[i].nummer, strlen(kunde[i].nummer)-1 ); // fjerner \n fra array string
    if (strcmp(convKunde, brugerInput) == 0)
      {
      printf("kundenummer: %s", kunde[i].nummer);
      printf("navn: %s", kunde[i].navn);
      printf("adresse: %s\n", kunde[i].adresse);
      // hvis "pause" indsættes her venter den! ellers ikke.
      }
    }
  system("PAUSE");
  return 0;
}
Avatar billede jpk Nybegynder
04. november 2004 - 08:28 #1
Et char array SKAL være nultermineret!
Hvis du fjerner karakteren \n, kan funktionerne der arbejder på strengen ikke vide hvor den slutter...
Avatar billede kbhadsten Nybegynder
04. november 2004 - 08:59 #2
ok! Så ved man da det ;D men hvordan skal jeg så sammenligne et input fra brugeren med dataen fra filen som ligger i mit array?
Avatar billede ranglen Nybegynder
04. november 2004 - 09:06 #3
Jeg synes ikke jpk's forklaring giver mening.

Dit program kan afslutte to steder. Hvis du ikke når ned til PAUSE, så kontroller om den hopper ud fordi filen ikke kan åbnes.

if(!fil) // Tjekker om fopen er true
    {
    printf("kunne ikke åbne filen");
    return -1;
    }
Avatar billede kbhadsten Nybegynder
04. november 2004 - 09:07 #4
Den har jeg selv. Den ligger mellem fopen() og while feof()
Avatar billede jpk Nybegynder
04. november 2004 - 09:11 #5
Som jeg forstod det på din forklaring, var det efter du havde tilføjet koden til at fjerne \n, altså i den nederste kode..?

Men hvorfor prøver du ikke at debugge koden for at se præcis hvor det går galt og hvilke værdier dine variable har?
Avatar billede kbhadsten Nybegynder
04. november 2004 - 09:13 #6
er igang ;) er lige kommet tilbage pause, så nu skal jeg da til at se på det. Det kunne jo bare godt ske der var en guru eller to der lige kunne forklarer mig hvad jeg gør galt!
Avatar billede bertelbrander Novice
04. november 2004 - 20:15 #7
Er du sikker på at nummer kun er på 2 tegn.

Man bør ikke bruge >> med char array's (eller hvis man ikke er 100% sikker på at man læser det man forventer.

Index blive talt for meget op, feof returnerer først true når man har forsøgt at læse efter enden på filen.
Avatar billede kbhadsten Nybegynder
08. november 2004 - 10:44 #8
* lukker tråden *
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