Problema gets fgets

di il
6 risposte

Problema gets fgets

Ciao, devo leggere delle stringhe immesse da tastiera conteneti degli spazi vuoti...scanf non funziona, provo con gets ma il programma lo "salta" senza dare errori, cercando in rete ho capito che è un problema di memoria...ma anche utilizzando fgets con stdin il problema è sempre lo stesso, il programma passa oltre senza darmi la possibilità di inserire la stringa....che faccio!!!...grazieeee

6 Risposte

  • Re: Problema gets fgets

    Posta il codice che hai scritto, cos possiamo capire se c'e' qualcosa che non va con il codice.
  • Re: Problema gets fgets

    Faccio un esempio:
    
    ...
    char *stringhe[10][10];
    ...
    printf ("Acquisizione stringa: ");
    fgets(stringhe[0][0], 200, stdin);
    ...
    
    quando vado a far girare il programma, questo passa oltre senza chiedermi la stringa....boooo...cosa sbaglio???
  • Re: Problema gets fgets

    Ciao scusa il ritardo ma mi ero dimenticato di questo post:

    char* stringhe[10][10];
    *stringhe[0] = (char*)malloc(10*sizeof(char*));
    printf ("Acquisizione stringa: ");
    fgets(stringhe[0][0],200,stdin);

    tu hai creato una matrice di puntatori, ricorda che i puntatori vanno allocati o con la malloc in C oppure con la new in C++.

    *stringhe[0] = (char*)malloc(10*sizeof(char*));

    ho allocato solo il primo elemento.
  • Re: Problema gets fgets

    La matrice viene allocata tramite un funzione dedicata che oltre ad usare malloc la definisce con il contenuto di un file csv opportunamente formattato.
    void caricamento_matrice(char *arg) 
    {
    FILE *fp;
    char buf[2000]={0};
    int i=0;
    int j,k;
    char del[]=",";
    if ((fp = fopen(arg,"r"))==NULL) {
        printf("impossibile aprire il file.\n");
        exit(1);
    }
    while(1) {
        char *res=fgets(buf, 2000, fp);
        if( res==NULL )
            break;
        char *a=strtok(buf,del);
        char *nuova=(char *)malloc((strlen(a)+1)*sizeof(char)); 
        strcpy(nuova,a);
        matrice[i][0]=nuova;
            for (j=1;j<N;j++) {
                a=strtok(NULL,del);
                char *nuova=(char *)malloc((strlen(a)+1)*sizeof(char)); 
                strcpy(nuova,a);
                matrice[i][j]=nuova;       
            }
        i++; 
    }
    fclose(fp);
    }
    il problema continua ad essere fgets che non mi funziona come dovrebbe, esiste un altro modo per acquisire stringhe con spazi vuoti? ...grazie per la pazienza!!!
  • Re: Problema gets fgets

    Perchè dici che la fgets() non funziona come dovrebbe? che errori hai?
    prova a modificare con questo il ciclo for della funzione caricamento_matrice():
    for (j=1;j<N;j++) {
    a=strtok(NULL,del);
    if(!a)
    break;
    char *nuova=(char *)malloc((strlen(a)+1)*sizeof(char));
    strcpy(nuova,a);
    matrice[j]=nuova;
    }
  • Re: Problema gets fgets

    Credo di essere riuscito a capire cosa succedeva con fgets, ovvero al momento dell'acquisizione della stringa veniva inserito anche il carattere "\n" quindi nelle fasi successivi del programma dava problemi....ho risolto con il semplice gets() preceduto da getchar(), non la soluzione ottimale ma funziona ....ti ringrazio per l'aiuto...visto che sono a rompere ti vorrei fare un'altra domanda:
    premetto che il programma funziona da terminale sotto linux, in particolare funzionera su gnome-terminal, come faccio a far espandere la finestra del terminale a tutto schermo all'avvio del programma?
    grazie ancora per l'aiuto!!
Devi accedere o registrarti per scrivere nel forum
6 risposte