Avatar billede tokaje Nybegynder
16. januar 2001 - 00:54 Der er 5 kommentarer og
1 løsning

array

Jeg har problemer med at ændre i et array, uden at programmet går ud i CPUén, og crasher.

min programkode ser ud som følger - hvad er galt?
int CLaegehus::laegeskift()
  {
      string Pnavn;

  int patient, laegevalg, i;
      cout<<\"Indtast navn på patient som ønsker at skifte: \";
      cin>>Pnavn;

  for(i=0; i<patient; i++)

      if (Pnavn == (patienttabel[i].getPnavn()))
        {
        cout<<\"patient \"<<patienttabel[i].getPnavn();
          cout<<\'\\t\'<<patienttabel[i].getAdresse()<<endl;
        cout<<\"patienten har idag indexlaege \"<<patienttabel[i].getLaegevalg()<<endl;
        cout<<\"indtast ny laege: \";
        cin>>laegevalg;
        patienttabel[i].setLaegevalg(laegevalg);
        }
Avatar billede alquesm Nybegynder
16. januar 2001 - 01:06 #1
Hmmm...det kunne være rart at se definationen på din array! Måske det kunne hjælpe!? :)
Avatar billede tokaje Nybegynder
16. januar 2001 - 01:16 #2
her følger hele klassen! problemet er at arrayet åbenbart kører i uendelig løkke?

#ifndef CLAEGEHUS.H
#define CLAEGEHUS.H

#include <cstring>
#include <conio.h>
#include <iostream>
#include <CPatient.h>
#include <CLaege.h>

const int PMAX = 5;
const int LMAX = 5;

class CLaegehus
{
    private:
  CPatient patienttabel [PMAX];
  CLaege laegetabel [LMAX];
  int patient, laege;

  public:
  CLaegehus();

  void opretLaege();
  void udskrivLaege();
  void opretPatient();
  void udskrivPatient();
  int laegeskift();

};

    CLaegehus::CLaegehus():patient(0), laege(0)
    {}

    void CLaegehus::opretLaege()
    {
  CLaege midl;
  string navn, speciale;

  cout<<\"indtast laegens navn: \";
  getline(cin, navn);
  midl.setLnavn(navn);
  cout<<\"indtast speciale: \";
  getline(cin, speciale);
  midl.setSpeciale(speciale);

  laegetabel[laege] = midl;
  laege++;
  }

  void CLaegehus::udskrivLaege()
  {


      for (int i=0; i<laege; i++)
      {
          cout<<laegetabel[i].getLnavn();
          cout<<\'\\t\'<<laegetabel[i].getSpeciale()<<endl;
      }
  }


  void CLaegehus::opretPatient()
    {
  CPatient midl;
  string navn, adresse;
  int laegevalg;

  cout<<\"indtast patientens navn: \";
  getline(cin, navn);
  midl.setPnavn(navn);
  cout<<\"indtast adresse: \";
  getline(cin, adresse);
  midl.setAdresse(adresse);
  cout<<\"indtast Laegens indexnummer: \";
  cin>>laegevalg;
  midl.setLaegevalg(laegevalg);

  patienttabel[patient] = midl;
  patient++;
  }


  //void CLaegehus::laegeskift()



      int CLaegehus::laegeskift()
  {
      string Pnavn;

  int patient, laegevalg, i;
      cout<<\"Indtast navn på patient som oensker at skifte: \";
      cin>>Pnavn;

  for(i=0; i<patient; i++)

      if (Pnavn == (patienttabel[i].getPnavn()))
        {
        cout<<\"patient \"<<patienttabel[i].getPnavn();
          cout<<\'\\t\'<<patienttabel[i].getAdresse()<<endl;
        cout<<\"patienten har idag indexlaege \"<<patienttabel[i].getLaegevalg()<<endl;
        cout<<\"indtast ny laege: \";
        cin>>laegevalg;
        patienttabel[i].setLaegevalg(laegevalg);
        }
  }
  #endif

  void main()
  {
  CLaegehus a;

  a.opretLaege();
  a.opretPatient();
  a.laegeskift();
  getch();
  }
Avatar billede alquesm Nybegynder
16. januar 2001 - 01:26 #3
Hmm....umiddelbart kan jeg ikke se problemet..men hvorfor har du et #endif til sidst!? (Har aldrig brugt alle de funktioner som der er med # kaldene! :)
Avatar billede tokaje Nybegynder
16. januar 2001 - 01:30 #4
#endif er udelukkende fordi jeg har #ifndef, og #define i starten, for ikke at includere headerfiler flere gange - programmet skal til sin tid køre separat, og med CLaegehus også som headerfil
Avatar billede alquesm Nybegynder
16. januar 2001 - 01:31 #5
Ahhh! ;)
Avatar billede soepro Nybegynder
16. januar 2001 - 09:13 #6
Ooops - hvorfor svarede du på dit eget spørgsmål !?!?

Jeg vil tro problemet ligger i at når du finder den ønskede patient får du ikke afbrudt loopet. Prøv at ændre:

patienttabel[i].setLaegevalg(laegevalg);
}

til

patienttabel[i].setLaegevalg(laegevalg);
i = patient;
break;
}

(Jeg ved godt at den sidste break er unødvendig, når jeg har sat i til max vaerdien i løkken, men det er mere informativt at løkken break\'es.)
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