Strona 1 z 1

Wczytywanie smieci

Napisane: czwartek, 7 czerwca 2012, 21:35
przez Malutki
Część ponownie chciałbym prosić o wytłumaczenie co robię źle chodzi mi o to że wczytuje tablice do funkcji poprzez wskaźnik i potem chce przejść całą strukturę dopóki nie znajdę jej końca czyli pieewszego pustego rekordu robiąc to dostaje informacje z tablicy ale po nich śmieci funkcja dalej wypisuje proszę o podpowiedź co robię źle. Mój kod:

Code: Zaznacz cały

#include <iostream>

using namespace std;

struct Student
{
    char  Imie[30];
    char  Nazwisko[30];
    int numerIndeksu ;
    int liczba_punktow;
} s={NULL,NULL,0,0};


void Wczytaj(Student &s );
void PokazWyniki(Student *s);
void Najlepszy(Student *s);
void Najslabszy(Student *s);
void SredniWynik(Student *s);




int main()
{

    Student s[4] ={"pierwszy" ,"pierwszy 1" , 19099 , 21192 ,"pierwszy" ,"drugi 2" , 29099 , 292,"pierwszy" ,"trzeci 3" , 9099 , 2922,"pierwszy" ,"czwarty 4" , 92199 , 2192};

//    for(int i=0;i<sizeof(s)/sizeof(Student);i++)
//    {
//        cout << "\t\t\tDODAWANIE Studenta"   ;
//        cout << "\n================================================================================"<<endl;
//        cout << "Student Nr :"<< i <<endl;
//        Wczytaj(s[i]);
//    }
    PokazWyniki(s);
    Najlepszy(s);
    Najslabszy(s);
    SredniWynik(s);
}

void Wczytaj(Student &s )
{

    cout <<endl;
    cout << "Podaj Imie: ";
    cin >> s.Imie;
    cout << "Podaj Nazwisko: ";
    cin >> s.Nazwisko;
    cout << "Podaj Numer indexu: ";
    cin >> s.numerIndeksu;
    cout << "Podaj liczbę zdobytych punktów ";
    cin>> s.liczba_punktow;
    cout << "\nDziekuje dane studenta zostaly dodane \n\n";
    cout << "\n================================================================================"<<endl;
}

void PokazWyniki(Student *s)
{
    cout << "\t\t\tWYPISYWANIE WYNIKOW"  ;
    cout << "\n********************************************************************************"<<endl;
    int i=0;

    while(s->numerIndeksu !=NULL)
    {

        cout << i+1 << ") "<< s->Nazwisko  <<" \""<<s->Imie <<"\" "<< s->numerIndeksu <<" " << s->liczba_punktow<<endl;
        i++;
        s++;
    }



}
void Najlepszy(Student *s)
{
    int najwiecej=s->liczba_punktow;
    Student adres;

    for (int i=0 ; i <50; i++)
    {
        if(najwiecej < s->liczba_punktow and s->liczba_punktow !=NULL)
        {
            najwiecej=s->liczba_punktow;
            adres=*s;

        }
        s++;

    }

    cout << "\n********************************************************************************"<<endl;
    cout << "\t\t\tNajwięcej punktow zdobyl : "  ;
    cout << "\n================================================================================"<<endl;
    cout  << "Student: "<< adres.Nazwisko << adres.Imie  << "liczba zdobytych punktow: " << adres.liczba_punktow ;
    cout << "\n================================================================================"<<endl;
}


void Najslabszy(Student *s)
{
    int najmniej=s->liczba_punktow;
    Student adres;

    for (int i=0 ; i <4; i++)
    {
        if(najmniej > s->liczba_punktow and s->liczba_punktow !=NULL)
        {
            najmniej= s->liczba_punktow;
            adres=*s;

        }
        s++;

    }

    cout << "\n********************************************************************************"<<endl;
    cout << "\t\t\tNajmniej punktow zdobyl : "  ;
    cout << "\n================================================================================"<<endl;
    cout  << "Student: "<< adres.Nazwisko << adres.Imie  << "liczba zdobytych punktow: " << adres.liczba_punktow ;
    cout << "\n================================================================================"<<endl;
}

void SredniWynik(Student *s)
{
    int ile=0;
    double suma_punktow=0;
    double srednia=0;

    while(s->liczba_punktow !=NULL)
    {
        suma_punktow=s->liczba_punktow+suma_punktow;
        ile++;
        s++;
    }

    cout <<"Srednia ocena z tego egzaminu:  "<<suma_punktow/ile;


}



Re: Wczytywanie smieci

Napisane: piątek, 8 czerwca 2012, 13:09
przez Morfidon
Nie masz pewności, czy czegoś nie będzie po ostatnim rekordzie Student, może być to NULL, ale niekoniecznie. To nie jest zmienna typu char, który na końcu ma zawsze \0, gdy kończy się łańcuch znakowy czyli NULL. Dlatego musisz przekazać do funkcji Pokaz, wielkość tablicy i wypisać zawartość tak jak to robisz w komentarzu w funkcji main.