nie prawidlowo wyswietlajace sie dane struktury z tablic jezyk c

0

Witam was serdecznie, niestety znowu mam maly problem. Konkretnie chodzi o to zadanie

"Napisac program, w którym zostanie zadeklarowana tablica 10 elementowa
przechowujaca informacje o studentach. Informacje o studencie powinny byc
przechowywane w postaci struktury danych (nr indeksu, imie, nazwisko, rok studiów). Dla
tak stworzonej tablicy program powinien umozliwiac wyswietlanie studenta o podanym nr indeksu,"

Stworzylem tablice, jednak sama struktura wyswietla mi tylko jakies krzaki zamiast prawidlowych danych. Prosilbym o nakierowania co robię zle:) Dziękuje z góry.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define A 10
#define B 10

int main()
{

    int i, j;

    char tab1[A][B] = {
        { 'A', 'n', 'a', 's', 't', 'a', 'z', 'j', 'a' },
        { 'A', 'r', 'e', 'k' },
        { 'E', 'w', 'a' },
        { 'K', 'a', 's', 'i', 'a' },
        { 'I', 'w', 'o' },
        { 'I', 'z', 'a' },
        { 'I', 'd', 'a' },
        { 'I', 'g', 'a' },
        { 'M', 'a', 'r', 'c', 'i', 'n' },
        { 'W', 'o', 'j', 't', 'e', 'k' },
    };

    for (i = 0; i < A; i++) {
        for (j = 0; j < B; j++)
            printf("%c", tab1[i][j]);
        printf("\n");
    }
    char tab2[A][B] = {
        { 'K', 'i', 'l', 'a', 'r' },
        { 'M', 'i', 's' },
        { 'P', 't', 'a', 'k' },
        { 'N', 'i', 'k' },
        { 'D', 'u', 'c', 'h' },
        { 'N', 'o', 'w', 'a', 'k' },
        { 'K', 'o', 'w', 'a', 'l', },
        { 'W', 'a', 's' },
        { 'B', 'e', 'n', 's', 'o', 'n' },
        { 'G', 'u', 'r', 'a', 'l' },
    };

    for (i = 0; i < A; i++) {
        for (j = 0; j < B; j++)
            printf("%c", tab2[i][j]);
        printf("\n");
    }

    int tab3[A] = { 111, 112, 113, 114, 115, 116, 117, 118, 119, 120 };

    for (i = 0; i < A; i++) {
        printf("%d", tab3[i]);
        printf("\n");
    }
    int tab4[A] = { 4, 5, 3, 3, 1, 2, 3, 5, 1, 4 };

    for (i = 0; i < A; i++) {
        printf("%d", tab4[i]);
        printf("\n");
    }

    struct dane {
        char tab1[i][j];
        char tab2[i][j];
        int tab3[i];
        int tab4[i];
    } dane;

    scanf("%s", &dane.tab3[i]);
    printf("Dane: %c-%c-%d\n", dane.tab1[i][j], dane.tab2[i][j], dane.tab4[i]); 
3

tab1 w strukturze nie ma żadnego powiązania z tab1 w main. Poza tym przykład sugeruje, że źle rozumiesz ideę struktury. To nie jest coś, co grupuje istniejące zmienne, struktura tworzy i przechowuje nowe zmienne.

typedef struct
{
	int indeks;
    char imie[50];
    char nazwisko[50];
    int rok;
} Student;

int main()
{
    Student studenci[10];
    studenci[0].indeks = 94949;
    strcpy(studenci[0].imie, "Alina");
    ...
}
0

czyli najpierw tworzę strukture, a pózniej przypisuje jej poszczegolnym argumentom dane za pomoca strcpy? Czyli trzeba przebudować te tab1, tab2 itd, na wartosci argumentow do struktury. Dobrze to rozumuje? tylko co oznacza typedef?

2

typedef jest potrzebne jeśli chcemy zamiast struct Student posługiwać się typem Student (z dokładnością do miejsca deklaracji typu Student).

1
lamaczyk napisał(a):

czyli najpierw tworzę strukture, a pózniej przypisuje jej poszczegolnym argumentom dane za pomoca strcpy?
Nie zawsze za pomocą strcpy, np. zwykłe inty można po prostu przypisać.

tylko co oznacza typedef?
typedef tworzy nową nazwę dla istniejącego typu, np.

typedef int supertyp;
supertyp x;    // x jest typu int

W tym przypadku został użyty, żeby potem nie powtarzać słowa struct. Analogicznie możesz bez typedef:

struct Student
{
    ...
};
 
int main()
{
    struct Student studenci[10];
    ...
}

Wszędzie musisz pisać struct Student zamiast samego Student.

0

Ok, juz wszystko rozumiem, dziekuje wam z calego serca:) Pierwszy raz korzystam z pomocy jakiegokolwiek forum i zadziwia mnie w jaki sprawny sposób to działa. Nikt wam nie każe pomagać, nie płaci za to, a mozna liczyc na pomoc, nawet w tak prostej sprawie. Dziekuje jescze raz, to na pewno nie bedzie ostatni moj post;)

1

Jeśli pytanie nie jest z natury "nic nie rozumiem, pomóżcie", tylko pokazujesz, że wykonałeś jakąś pracę, ale coś nie tak zrozumiałeś, to znajdziesz pomoc jak będziesz chciał, aby robiono za ciebie, to zrozumienia nie znajdziesz.

0

chcialem powiedziec, ze udalo mi sie dzieki waszym radom napisac to. Ponizej wklejam gotowy kod.(ostatnia pętla do poprawienia, ale nie mam juz siły:), tylko kosmetyka).

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

typedef struct dane
{
    int indeks;
    char imie[25];
    char nazwisko[25];
    int rok;
}dane ;

dane tab1[4];

int main()
{
    int n;
    int i;
    int a=1;
    printf("\n Wypisz dane 3 studentow:");
    for(i=0; i<3; i++)

    {
        printf("\n Podaj nr  indeksu ",a);
        printf (" studenta: ");
        scanf("%d",&tab1[i].indeks);
        printf("\n Podaj imie studenta: ");
        scanf("%s",&tab1[i].imie);
        printf("\n Podaj nazwisko studenta: ");
        scanf("%s",&tab1[i].nazwisko);
        printf("\n Podaj rok studiow : ");
        scanf("%d", &tab1[i].rok);
        a++;
    }

printf("\n\n Ktory index mam  wyswietlic \n?");
scanf("%d",&n);

    for(i=0;i<3;i++)
    {
    if(n == tab1[i].indeks)
        {
            printf("\n Indeks: %d", tab1[i].indeks);
            printf("\n Imie : %s", tab1[i].imie);
            printf("\n Nazwisko: %s", tab1[i].nazwisko);
            printf("\n Rok  : %d", tab1[i].rok);
            break;
        }
            else printf("Brak studenta w bazie danych");


    }

    return 0;
}
 

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