Malloc, struktura i scanf - cos nie tak

Malloc, struktura i scanf - cos nie tak
loxian
  • Rejestracja:około 16 lat
  • Ostatnio:około 12 lat
0

Dzien dobry,

uprzedzam, nie mam polskich znakow i nad tem ubolewam.

Zaczynajmy, pisze programik, niby male nic, ogolnie jest akcja:punkty na plaszczyznie.

kod:

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

int main(int argc, char* argv[])
{
	typedef struct
	{
		char N;
		int x,y;
		float d;	/* potrzebne do czegostam*/
	}punkt;
	
	int Q,i;
	punkt *t;

	scanf("%i", &Q);
	
	t = (punkt*) malloc(Q * sizeof(punkt));
	
	for( i = 0 ; i < Q ; i++ )
	{
		scanf("%c %i %i", &(t[i].N) , &(t[i].x) , &(t[i].y));
	}		
	for( i = 0 ; i < Q * 16 ; i++ )
	{
		printf("%c %i %i", t[i].N, t[i].x, t[i].y);
	}
	
	free(t);
	return 0;
} 

Fun i zabawa, ale wyjscie wyglada nie tak jakbym tego chcial, podejzewam scanfa o to ze pakuje dane nie tam gdzie powinien, lub ja nie ogarnalem modelu pamieci.

Struktura jest tak duza jak ilosc_jej_elementow * element_najwiekszy ( 2,4,8 ).

I nie wiem za bardzo jak to ugryzc. Czytalem podobny temat, jednak zupelnie nie oddaje on tego czym jest moj problem.

Wyglada to tak jakby nie zawsze dzialal scanf ( przeskakuje o 2 w przod )

Tak wyglada wyjscie:

Kopiuj
 
5
w 1 1
s 2 2
c 4 4

 0 0
w 1 1

 0 0
s 2 2

 0 0

Kuc!
edytowany 1x, ostatnio: loxian
ZJ
  • Rejestracja:około 14 lat
  • Ostatnio:około 12 lat
1

"%c" nie kasuje '\n' podczas wczytywania, jak jest w tej pozycji w scanfie. Z mana:

c

Matches a sequence of characters whose length is specified by the maximum field width (default 1); the next pointer must be a pointer to char, and there must be enough room for all the characters (no terminating null byte is added). The usual skip of leading white space is suppressed. To skip white space first, use an explicit space in the format.

loxian
  • Rejestracja:około 16 lat
  • Ostatnio:około 12 lat
0

Dziekuje za odpowiedz , juz popprawilem.


Kuc!

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.