problem med array

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Vinnaren
    Medlem
    • 2005-09-18
    • 858

    #1

    problem med array

    Har följande kod:
    Code:
    int main()
    {
        Person person[10];
        int menyVal;
        bool go = true;
    
        do
        {
            if(menyVal == 1)
            {
                add();
                break;
            }
            else if(menyVal == 2)
            {
               show();
               break;
            }
            else
            {
                go = false;
            }
        }while(go);
      return 0;
    }
    
    
    void add()
    {
        int j =3;
        string fnamn;
        string enamn;
    
        //Frågar användaren efter namn, adress
        cout << "Ange Förnamn: ";
        cin >> fnamn;
        cout << "Ange Efternamn: ";
        cin >> enamn;
    
        person[j].setFirstName(fnamn);
        person[j].setLastName(enamn);
    
        j+=1;
    }
    
    
    void show()
    {
          for(int i=0; i<10; i++)
        {
            cout << person[i].getFirstName() + " " + person[i].name.getLastName() << endl;
        }
    
    }
    Undrar hur man gör när man ska skicka min array (person) mellan main, add, show. Nu kommer man bara åt den i main metoden.

    Sen i metoden show, hur gör man för att få reda på hur många rader arrayen innehåller, så man slipper loopa ut massa blankrader?


    Tacksam för all hjälp
  • Peter S
    Medlem
    • 2002-12-15
    • 5484

    #2
    [kod]void show(Person* p, int size)
    {
    //use p[]
    }

    show(person, 10);[/kod]

    Comment

    • Compusa
      Moderator
      • 2002-01-14
      • 2952

      #3
      Vad du gör i din add-funktion förstår jag inte eftersom du lägger in elementet på samma index varje gång, så den får du nog fundera lite över.

      Enligt mig är det bättre och mindre bökigt att använda referenser istället för pekare.

      Code:
      void show(Person& person, int size)
      {
          for(int i=0; i < size; i++)
          {
              cout << person[i].getFirstName() + " " + person[i].name.getLastName() << endl;
          }
      
      }
      
      show(person, 10);
      Referenser vs pekare, se nedan:
      Code:
      void swap(int& variable1, int& variable2)
      {
          int temp = variable1;
          variable1 = variable2;
          variable2 = temp;
      }
      
      void swap(int* variable1, int* variable2)
      {
          int temp = *variable1;
          *variable1 = *variable2;
          *variable2 = temp;
      }
      Ytterligare argument: http://www.parashift.com/c++-faq-lit...s.html#faq-8.6
      Last edited by Compusa; 2007-07-09, 17:55.

      Comment

      • Vinnaren
        Medlem
        • 2005-09-18
        • 858

        #4
        tack, det funkade perfa

        Har ett problem till nu när jag kodade vidare. Det är när jag ska anv getline
        Har följande:
        Code:
            cout << "Ange GatuAdress: ";
            cin.getline(GatuAdress,30);
            cout << "Ange PostNummer: ";
            cin.getline(PostNummer,6);
        Men får felmeddelandet:
        error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize)' : cannot convert parameter 1 from 'std::string' to 'char *'

        Hur löser jag det?

        tacksam för all hjälp

        Comment

        • Peter S
          Medlem
          • 2002-12-15
          • 5484

          #5
          [kod]getline(cin, PostNummer);[/kod]

          Comment

          • Vinnaren
            Medlem
            • 2005-09-18
            • 858

            #6
            fungerade inte, får nu felmeddelandet:

            error C2780: 'std::basic_istream<_Elem,_Traits> &std::getline(std::basic_istream<_Elem,_Traits> &,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : expects 3 arguments - 2 provided

            5 gånger på varje:
            Code:
                cout << "Ange GatuAdress: ";
                getline(GatuAdress, cin);
                cout << "Ange PostNummer: ";
                getline(PostNummer, cin);

            Comment

            • Peter S
              Medlem
              • 2002-12-15
              • 5484

              #7
              Jag lade parametrarna fel. Se ovan

              Comment

              • Vinnaren
                Medlem
                • 2005-09-18
                • 858

                #8
                tack, ett litet problem bara,

                Code:
                    cout << "Ange GatuAdress: ";
                    getline(cin, GatuAdress);
                    cout << endl << "Ange PostNummer: ";
                    getline(cin, PostNummer);
                Ange GatuAdress:
                Ange PostNummer:

                kommer upp samtidigt, hur löser man det så det kommer fram en och en som de andra innan gör?

                Comment

                • yador
                  Medlem
                  • 2004-03-16
                  • 457

                  #9
                  Du har nog läst in några tecken från tagentbortet med t ex "cin >> any;", men glömt bort att ta bort "enter knappen" i inmatningsbuffren som stannar kvar.

                  För att testa om detta är sant så kan du prova skriva cin.ignore(); precis före getline(cin,GatuAdress);

                  Comment

                  • Vinnaren
                    Medlem
                    • 2005-09-18
                    • 858

                    #10
                    tack, nu funkar det

                    Comment

                    Working...