Struktury danych w C

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;
}
0

Debuguj.

Poza tym nie zjadłeś typedef przy strukturze?

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

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++ :/ ).

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

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

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

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