Oppure

Loading
28/09/08 16:52
giocala88
Salve ragazzi, ho un picclo problema in un'implementazione in ANSI C.
Vorrei acquisire una stringa fino ad un MAX di 100 caratteri...però vorrei che l'acquisizione di tale stringa terminasse al premere INVIO...quindi allocare dinamicamente i caratteri acquisiti...
Il problema sussiste nel fatto che l'acquisizione dei caratteri non è completa...infatti si stampano i primi 10/11 caratteri....
Spero di essere stato chiaro...Ringrazio tutti anticipatamente.

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

int main()
{
int i, j;
char Formula[100],
*F;

printf("\nAcquisizione Formula: ";);


for(i = 0; i <= '\n'; ++i)
{
scanf("%c",
&Formula[i]);


/* allocazione dinamica degli elementi della Formula */
F = (char *)calloc(Formula[i],
sizeof(char));
}


for(j = 0; j < Formula[i]; ++j)
{
printf("%c", Formula[j]);
}

return 0;
}
Ultima modifica effettuata da giocala88 28/09/08 16:54
aaa
28/09/08 18:29
pierotofy
La memoria va prima allocata dinamicamente e poi puoi leggere i caratteri... non viceversa.
Il mio blog: piero.dev
28/09/08 20:48
giocala88
Scusi, potrebbe essere più chiaro perfavore???...ho prima allocato con calloc, poi successivamente faccio in modo che legga....sbaglio o è impostata così la mia implementazione???...grazie ancora...
aaa
28/09/08 21:01
pierotofy
Scusa, probabilmente è colpa della tua spiegazione un po' imprecisa che ho risposto subito senza guardare il sorgente, ora ho guardato e la parte riguardante l'allocazione sembra a posto.

Il motivo per cui ti vengono letti solo i primi 10-11 caratteri è perchè usi in maniera scorretta questo codice:

for(i = 0; i <= '\n'; ++i)
{
scanf("%c",
&Formula); 


Infatti il ciclo parte da 1 e arriva al corrispondente di '\n' che in ASCII è 10. (Una tabella completa la trovi qui: asciitable.com/ ).

Per risolvere puoi fare qualcosa del genere:

char ch;
int i = 0;

do{
  scanf("%c",&ch);
  Formula[i++] = ch;
}while(ch != '\n');



Comunque non riesco a capire perchè hai allocato altro spazio nella memoria con questa chiamata:

F = (char *)calloc(Formula,
sizeof(char)); 


Ultima modifica effettuata da pierotofy 28/09/08 21:05
Il mio blog: piero.dev