Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - help....ciclo for scrittura/lettura
Forum - C/C++ - help....ciclo for scrittura/lettura

Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 18:52
Domenica, 28/09/2008
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);
      

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

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

    return 0;
}

Ultima modifica effettuata da giocala88 il 28/09/2008 alle 18:54
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:29
Domenica, 28/09/2008
La memoria va prima allocata dinamicamente e poi puoi leggere i caratteri... non viceversa.


Il mio blog: https://piero.dev
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 22:48
Domenica, 28/09/2008
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...

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:01
Domenica, 28/09/2008
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:

Codice sorgente - presumibilmente Plain Text

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



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

Per risolvere puoi fare qualcosa del genere:

Codice sorgente - presumibilmente C/C++

  1. char ch;
  2. int i = 0;
  3.  
  4. do{
  5.   scanf("%c",&ch);
  6.   Formula[i++] = ch;
  7. }while(ch != '\n');



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

Codice sorgente - presumibilmente Plain Text

  1. F = (char *)calloc(Formula,
  2. sizeof(char));




Ultima modifica effettuata da pierotofy il 28/09/2008 alle 23:05


Il mio blog: https://piero.dev
PM Quote