Struktury danych w C

Odpowiedz Nowy wątek
2011-10-15 14:58
Karoleusz
0

Witam,

mam maly problemik, takki programik napisałem śmieszny na azailczenie, ale mi się crashuje nie wiem czemu ( albo jestem taki głupi, albo jestem taki głupi :D ).

Jak mam tam gdzies błąd to niechajże ktoś palcemi mi go wskaże ładnie proszę.

Pozdrawiam

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

struct stud                                     //strukturka studenta
{
       char imie[20], nazwisko[20], kierunek[3];
       unsigned int indeks;
       double ocena;
       int check;
};

int a=48;                                        //potrzebne do menu

stud grupa[100];                                 //tablica strukturek studencików

int menu()
{
     printf("\t--------------------------------\n");
     printf("\t|                              |\n");
     printf("\t|  1.Wpisz studenta [max.100]  |\n");
     printf("\t|  2.Usun studenta             |\n");  
     printf("\t|  3.Wypisz studentow          |\n");
     printf("\t|  4.Zamknij                   |\n");
     printf("\t|                              |\n");
     printf("\t--------------------------------\n");

     return getch();
}
int sprawdz(int i)                                   //funkcja sprawdzajaca
{                                                     //czy jest juz student
      if(grupa[i].check==0) return 0;
      else if(grupa[i].check==1) return 1;                                                //o takiej liczbie porzadkowej      
}
void wpisz_st()
{
     int i=0;
     for(int z=0 ;z<100 ;z++)
     {
         if(sprawdz(z)==0) 
         {
         i=z;
         break;    
         }
     }

     printf("Wpisz dane studenta ( imie, nazwisko, numer indeksu oraz ocene):\n");

     printf("Imie: ");
     scanf("%s", grupa[i].imie);

     printf("Nazwisko: ");
     scanf("%s", grupa[i].nazwisko);

    // printf("Nr indeksu: ");
   //  scanf("%d", grupa[i].indeks);

     printf("Kierunek: ");
     scanf("%s", grupa[i].kierunek);

     printf("Ocena: ");
     scanf("%f", grupa[i].ocena);

     system("CLS");

     grupa[i].check=1;

     printf("Wpisano studenta o numerze %d", i);
     a=48;    
}
void usun_st()
{
     int i;

     printf("Podaj numer porzadkowy studenta do usuniecia: ");
     scanf("%d", i);
     if(i>=0 && i<=100)
     {

      if(grupa[i].check==0) printf("Taki student nie istnieje");
      else if(grupa[i].check==1) 
                           {
                           grupa[i].check=0;
                           system("CLS");
                           printf("Student usuniety.");
                            }
                           }

     }
void list_st()
{
     system("CLS");

     printf("\tLP.\tImie\tNazwisko\tNr Indeksu\tKierunek\tOcena\n\n");

     for(int i=0;i<100;i++)
     {
             if(grupa[i].check==1) 
             {
                printf("\t%d\t%s\t%s\t%d\t%s\t%f1.2\n" , i, grupa[i].imie, grupa[i].nazwisko, grupa[i].indeks, grupa[i].kierunek, grupa[i].ocena);
             }
             if(grupa[i].check==0) printf("\t%d\tBrak Wpisu\n",(i+1));
     }
     printf("\n\n");                                   //tak zeby sie nie zrobilo maslo na ekranie
}

int main(int argc, char *argv[])
{
    while(1)
    {
            for(int i=0;i<100;i++) grupa[i].check=0;   //ustawienie czystej tablicy studentow
            if(a==48) a=menu();
            if(a==49){
                       wpisz_st(); 
                       a=48;
                       }
            else if(a==50) 
                 {
                 usun_st(); 
                 a=48;
                 }
            else if(a==51) 
            {
                 list_st();
                 a=48;
            }
            else if(a==52) return 0;
            else 
            {
                printf("\tNie cwaniakuj!\n");
                a=48;
            }

    }
    system("PAUSE");
    return EXIT_SUCCESS;
}

Pozostało 580 znaków

2011-10-15 15:03
0

Debuguj.

Poza tym nie zjadłeś typedef przy strukturze?

O i jeszcze widzę, że w scanf nie podajesz adresów.


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju, 2011-10-15 15:10

Pozostało 580 znaków

2011-10-15 16:05
Karoleusz
0

Rzeczywiście :D z tym już sobie poradziłem, jak widać rozumu zabrakło. Ale teraz mam inny pproblem, funkcja list_st () wypisuje ladnie studentów, ale neistety jak jakiś studencik ma za dlugie imie to się rozkracza cała tabela. Za cholerkę nie mogę tego ogarnąc. To nie jest niestety c++ ze sobie iomanipa wsadzę i już. Coś czytałem o formatowaniu w funkcjiii printf, ale niestety, za wiele nie uzyskałem ( dokumentacja o c głównie jest uboga, bo wypiera ją c++ :/ ).

Pozostało 580 znaków

2011-10-15 16:10
0
struct stud                                     //strukturka studenta
{
       char imie[20], nazwisko[20], kierunek[3];  // ?
       unsigned int indeks;
       double ocena;
       int check;
};

Czy taki zapis jest wogóle poprawny? ;o
Wydawało mi się, że standard mówi, że trzeba każde pole oddzielnie deklarować.


Gdy się nie wie, co się robi, to dzieją się takie rzeczy, że się nie wie, co się dzieje ;-)
Hm, gcc z -Wall -Wextra -pedantic -std=c99 nic nie mówi o tym. - Endrju 2011-10-15 16:27

Pozostało 580 znaków

2011-10-15 16:46
Karoleusz
0

"oddzielnie deklarowac"

mam te tablice oddzielnie pozapisywac pod sobą? przecież c pozwala na zapisanie

int a,b,c;

więc i w strukturze z tym nie powinno byc problemu

program poprawiłem, tlyko to formatowanie przy wypisywaniu... skompilujcie soebi i zobaczcie co się dzieje po wypisywaniu ludzi , jak sie rozkracza tam wszystko

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0