Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Przypisywanie struktury do tablicy

#1
Przypisywanie struktury do tablicy
Mam problem z programem w c Smutek
Napisać program, w którym zostanie zadeklarowana tablica 10 elementowa
przechowująca informacje o studentach. Informacje o studencie powinny być
przechowywane w postaci struktury danych (nr indeksu, imię, nazwisko, rok studiów). Dla
tak stworzonej tablicy program powinien umożliwiać: 
• wprowadzanie danych studenta,
• wyświetlanie studenta o podanym nr indeksu,

Kod:
#include<stdio.h>
#include<stdlib.h>

int main(){
int i;
int tab[9];

struct dane_studentow
{
unsigned int nr;
char* imie;
char* nazwisko;
unsigned int rok;
} student;

for (i=0 ; i<2 ; i++){
printf("wprowadz numer indeksu: ");
scanf("%u",&student.nr);
printf("wprowadz imie: ");
scanf("%s",&student.imie);
printf("wprowadz nazwisko: ");
scanf("%s",&student.nazwisko);
printf("podaj rok: ");
scanf("%u",&student.rok);
tab[i] = struct dane_studentow;
}

printf("Dane studenta: %u-%s-%s-%u/n",student.nr
                                    ,student.imie
                                    ,student.nazwisko
                                    ,student.rok);


return 0;
}

Nie wiem jak przypisywać dane pojedynczego studenta do tablicy po kolei Smutek Ma ktoś pomysł jak to zrobić ?
 System operacyjny: windows_eight Przeglądarka: ie
#2
RE: Przypisywanie struktury do tablicy
Kod:
int tab[9]; //To będzie tablica typu int, 9 elementowa.
A z treści zadania wyniki że ma być to tablica 10 elementowa przechowywująca dane_studentów. Czyli:
Kod:
dane_studentow tab[10]

Dalej:
Kod:
struct dane_studentow
{
    unsigned int nr;

    char* imie; //to tak nie zadziała, musisz mieć tablicę typu char np char imie[40] lub tak jak teraz lecz potem do alokacji potrzebnej pamięci musisz użyć malloc

    //char *TEST = "TEST" zadziała tylko na etapie kompilacji.[/font][/size]
    char* nazwisko; //to samo co wyzej

    unsigned int rok;

} student;

Potem możesz robić coś takiego:
Kod:
for (int i = 0; i < 10; ++i)
{
    printf("wprowadz numer indeksu: ");
    scanf("%u",&tab[i].nr);
    printf("wprowadz imie: ");
    scanf("%s", &tab[i].imie);
    printf("wprowadz nazwisko: ");
    scanf("%s", &tab[i].nazwisko);
    printf("podaj rok: ");
    scanf("%u", &tab[i].rok);
}
 System operacyjny: windows_xp_2003 Przeglądarka: chrome
#3
RE: Przypisywanie struktury do tablicy
Zrobiłem jak pisałeś i mam kilka błędów Smutek próbowałem właśnie już tak wcześniej ale ten błąd mnie zmylił i zrobiłem głupotę Smutek
||In function 'int main()'Ysz

|18|error: request for member 'nr' in 'tab[i]', which is of non-class type 'int'|
|20|error: request for member 'imie' in 'tab[i]', which is of non-class type 'int'|
|22|error: request for member 'nazwisko' in 'tab[i]', which is of non-class type 'int'|
|24|error: request for member 'rok' in 'tab[i]', which is of non-class type 'int'|
|25|error: expected primary-expression before 'struct'|
|25|error: expected ';' before 'struct'|

Kod:
#include<stdio.h>
#include<stdlib.h>

int main(){
int i;
int tab[10];

struct dane_studentow
{
unsigned int nr;
char imie[40];
char nazwisko[40];
unsigned int rok;
} student;

for (i=0 ; i<10 ; ++i){
printf("wprowadz numer indeksu: ");
scanf("%u",&tab[i].nr);
printf("wprowadz imie: ");
scanf("%s",&tab[i].imie);
printf("wprowadz nazwisko: ");
scanf("%s",&tab[i].nazwisko);
printf("podaj rok: ");
scanf("%u",&tab[i].rok);
tab[i] = struct dane_studentow;
}


printf("Podaj numer indeksu studenta, ktorego chcesz wyszukac : ")
scanf(nr);

printf("Dane studenta: %u-%s-%s-%u/n",student.nr
                                    ,student.imie
                                    ,student.nazwisko
                                    ,student.rok);


return 0;
}
 System operacyjny: windows_eight Przeglądarka: ie
#4
RE: Przypisywanie struktury do tablicy
Nie poprawiłeś, dalej masz

Kod:
int tab[10];

Po drugie, deklarację struktury stwórz poza main!
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: Przypisywanie struktury do tablicy
Poprawiłem działa wszystko Wesoły Dzięki wielkie za pomoc Wesoły 

Kod:
#include<stdio.h>
#include<stdlib.h>

struct dane
{
unsigned int nr;
char imie[20];
char nazwisko[40];
unsigned int rok;
} dane_studentow;
struct dane t[10];


int main(void){

   int i,szukany_nr;
for (i=0 ; i<10 ; i++){
       printf("\nStudent %d : \n",i+1);
   printf("Wprowadz numer indeksu studenta: ");
   scanf("%u",&t[i].nr);
   printf("Wprowadz imie studenta: ");
   scanf("%s",t[i].imie);
   printf("Wprowadz nazwisko studenta: ");
   scanf("%s",t[i].nazwisko);
   printf("Wprowadz rok studenta: ");
   scanf("%u",&t[i].rok);

}
printf("\nPodaj numer indeksu studenta ktorego chcesz wyszukac? : ");
scanf("%d",&szukany_nr);


for (i=0;i<10;i++){
   if (t[i].nr == szukany_nr){
       printf("Student %d\n",i+1);
   printf("nr: %d\n",t[i].nr);
   printf("imie : %s\n",t[i].imie);
   printf("nazwisko: %s\n",t[i].nazwisko);
   printf("rok: %u\n",t[i].rok);
   }
}
getc(stdin);
return 0;
}
Jeszcze tylko myślę jak zrobić jakieś zabezpieczenie jakby ktoś przy wpisywaniu numeru indeksu wpisał zły. po ifie dać else nie bardzo bo wtedy bada wsztstkie "i" Smutek Ma ktoś pomysł ?
 System operacyjny: windows_eight Przeglądarka: ie
#6
RE: Przypisywanie struktury do tablicy
Jeśli masz na myśli wyszukiwanie i przez zły numer masz na myśli taki który nie istnieje to może być takie coś:

Kod:
bool IsValidID(dane students[] , int size, int idToCheck)
{
    for (int i = 0; i < size; ++i)
        if (students[i].id == idToCheck)
            return true; //KTORYKOLWIEK Z WPISANYCH STUDENTOW POSIADA PODANE ID
    return false; //TU DOJDZIEMY TYLKO JESLI PRZELECIELISMY CALA STRUKTURE I NIE ZNALEZSLIMY PASUJACEGO ID WIEC NIE ISTNIE STUDENT Z TAKIM ID
}


//MAIN BLA LBA...
printf("\nPodaj numer indeksu studenta ktorego chcesz wyszukac? : ");
scanf("%d",&szukany_nr);
if (IsValidID(t, 10, szukany_nr) //JESLI SIE UDALO ZNALEZC
{
    //WCYAGNIJ STUDENTA O PODANEYM ID
}
else
{
    //JAKIS KOMUNIKAT O BLEDZIE
}


To by wszystko fajnie działało gdy każdy student ma kolejne numerki ID tak jak lecą w tablicy bo za pomocą id mógłbyś się odowływać bezpośrednio do elemntu tablicy, na przykład:
t[szukany_nr]

No ale wiadomo, że raczej tak nie będzie i teraz jest problem bo możesz raz lecieć po tablicy i znaleźć czy dany numer istnieje i jeśli istnieje to znów lecieć po tablicy i dopiero wyciągać tego studenta - no ale po co lecieć po tablicy dwa razy?


student TryToFindStudentByID(dane students[] , int size, int idToCheck)
{
    for (int i = 0; i < size; ++i)
        if (students[i].id == idToCheck)
            return students[i]; //ZNALEZLISMY WIEC ZWRACAMY TEGO STUDENTA
    return null; //ZWRACAMY NULL BO NIE ZNALEZLISMY STUDENTA
}

//MAIN BLA LBA...
printf("\nPodaj numer indeksu studenta ktorego chcesz wyszukac? : ");
scanf("%d",&szukany_nr);
student wyszukany = TryToFindStudentByID(t, 10, szukany_nr);
if (student != null)
{
    //ZNALEZIONY MOZESZ JUZ NA NIM NORMLANIE OPEROWAC
    printf("nazwisko: %s\n", student.nazwisko);
}
else
{
    //JAKIS KOMUNIKAT O BLEDZIE
}


Pisałem na brudno bez wrzucania w kompilator więc coś może nie działać/nie kompilować się ale złapiesz generalny pomysł.
 System operacyjny: windows_seven Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki (Przypisywanie struktury do tablicy)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Java- wypisanie liczb, które nie są podane w tablicy , wypisanie liczb z tablicy all? ccomp 10 20218 16.07.2017, 20:10
Ostatni post: ccomp
  Wyszukiwanie w tablicy soul1648 3 10050 01.04.2017, 14:26
Ostatni post: Ajgor
  [C++] Działanie na tablicy znakowej saba13579 8 9572 21.03.2017, 22:30
Ostatni post: Szachista

Skocz do: