Linguaggio C, comportamento anomalo input char

di il
4 risposte

Linguaggio C, comportamento anomalo input char

struct tipoPila{

	char v[MaxPila];
	int pos;
};

TipoPila Inserimento(TipoPila pila)
{
	int i;
	for(i = 0; i < MaxPila; i++)
	{
		printf("pila.v[%d] = ", i);
		scanf("%d", &pila.v[i]);
	}
	for(i = 0; i < MaxPila; i++)
	{
		printf("pila.v[%d] = %d\n", i, pila.v[i]);
	}
} 
Quando vado ad inserire gli elementi:

pila.v[0] = 1
pila.v[1] = pila.v[2] = 2
pila.v[3] = pila.v[4] = 3
pila.v[5] = pila.v[6] = 4
pila.v[7] = pila.v[8] =


Dall'elemento v[0] passa immediatamente a v[2] saltando v[1], e così via.

Se invece char v[MaxPila]; lo cambio con int v[MaxPila]; funziona tutto perfettamente. Perché?

4 Risposte

  • Re: Linguaggio C, comportamento anomalo input char

    Il problema e' nella scanf.

    Devi ricordarti 2 cose:
    1) la scanf usa un puntatore per sapere dove memorizzare il valore letto in ingresso, ma per sapere il tipo di dato, deve interpretare la sintassi '%<tipo dato>'. Tu hai scritto %d, quindi un intero a 32 bit
    2) quando scrivi '&v', e' il compilatore che ricupera l'indirizzo di memoria dell'i-mo elemento del vettore. E il compilatore sa di che tipo e'. E in particolare sa quale e' la dimensione di ogni elemento del vettore. Per un vettore di tipo char, ogni elemento e' di un byte, un vettore di int, di 4 byte

    Fai 2+2 ...
  • Re: Linguaggio C, comportamento anomalo input char

    Nono, ho sbagliato ad incollare. Anche con %c mi dava quel problema. Comunque, ho appena provato con %s e funziona. Strano però perché inserivo solo un carattere e non una stringa..
  • Re: Linguaggio C, comportamento anomalo input char

    Non è strano ...
  • Re: Linguaggio C, comportamento anomalo input char

    Cioè?
Devi accedere o registrarti per scrivere nel forum
4 risposte