dynamiczne wczytywanie z klawiatury do wskaźnika na strukturę.

0

Witam,
To mój pierwszy post na tym forum, a więc witam jeszcze raz;)

Napotkałem problem z pewnym zadaniem, mianowicie jego treść jest taka:

//Zdefiniuj strukturę student służącą do przechowywania danych osobowych
studenta (struktura powinna zawierać takie pola, jak: imie,
nazwisko, adres, pesel, kierunek i numer legitymacji).
Napisz funkcję, która otrzymuje jako argument wskaźnik na strukturę
student i wczytuje dane ze standardowego wejścia do rekordu
wskazywanego przez argument funkcji.//

mój kod wygląda tak: (to dopiero początek, bo się zaciąłem)

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

struct student{
	char *imie, *nazwisko, *pesel, *kierunek, *nl;
};

void funk(struct student *s){
	s->imie = malloc(sizeof(char)*100);
	scanf("%s", s->imie);
	printf("%s", s->imie);
}

int main(){
	struct student s;
	funk(&s);
return 0;
} 

Nie wiem jak zrobić coś takiego, żeby rozmiar pola struktury był odpowiednio allokowany do ilości podanych znaków. Nie bardzo też wiem o co chodzi z fragmentem polecenia "do rekordu wskazywanego przez argument funkcji."

0

Może... Wprowadź linię do bufora - fgets() (nigdy nie używaj gets, scanf("%s") też unikaj. http://www.gidnetwork.com/b-62.html ), po czym wyzeruj znak długość-1 (bo będzie tam \n), teraz zaalokuj wystarczającą ilość miejsca dla gotowego cstringu w buforze. Tym sposobem możesz wpisywać cstringi ze spacjami.

0

mógłbyś podać krótki fragment kodu z wykorzystaniem w taki sposób fgets(), nie bardzo wiem jak to ma wyglądać, nigdy jeszcze nie uzywalem fgets?

0

Przecież Ci podlinkowałem artykuł, wystarczyło przeczytać - kliknąć na jeden główny link w nim - http://www.gidnetwork.com/b-56.html - na dole masz pokazane co i jak, z tym, że b2 i dummy to bufory, czyli np: char bufor[101]; fgets(bufor, 100, stdin); - sprawdzanie czy wpisaliśmy więcej niż 100 znaków i co zrobić w takiej sytuacji masz w linku.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.