Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++]Problema caricamento stringhe da file

    Salve a tutti, devo fare un programma che conti il numero di elementi per ogni riga del file. Per fare ciò, ho scritto il seguente pezzo di codice:

    http://pastebin.com/sZgUn5Pn

    Il problema è che quando stampo la var app, che dovrebbe contenere il singolo elemento (byte), compaiono sullo schermo simboli strani come traingoli, #, @, ecc..
    Come posso risolvere? Help please non so più che fare.
    (nel codice in pastebin mi sono dimenticato di aggiungere i ! prima di strcmp)

    P.s.: il file è di questo tipo:
    12 25 63
    78 52 11
    10 25 66

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Quando poni delle domande, posta il codice nel forum e non su un altro sito.

    Inoltre, indica anche cosa è il tipo

    stringa

    che hai usato
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    Re: [C++]Problema caricamento stringhe da file

    Originariamente inviato da nostradamus1915
    Per fare ciò, ho scritto il seguente pezzo di codice:

    http://pastebin.com/sZgUn5Pn
    codice:
    stringa app;
    che cos'è "stringa"?

  4. #4
    Codice:

    int c_count(stringa nfile){
    stringa app;
    int i=0,k=0;

    fstream filemn("ges.txt",ios::in);
    while(!filemn.eof()){
    filemn.read(app,1);
    cout << "app: " << app << endl;
    if(strcmp(app,"\n")){
    i++;
    k=0;
    cout << "i: " << i << endl;
    }
    else if(strcmp(app," "))
    k++;
    }
    i++;
    filemn.close();
    }

    tipo stringa:
    typedef char stringa[100];

    Grazie.

  5. #5
    Le librerie che ho incluso sono le seguenti:

    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <string.h>

    Prima del ciclo ho messo:
    strcpy(app,NULL);
    Ma mi crasha il programma .

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da nostradamus1915
    Le librerie che ho incluso sono le seguenti:

    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <string.h>

    Prima del ciclo ho messo:
    strcpy(app,NULL);
    Ma mi crasha il programma .
    E ci credo, va a cercare una stringa all' indirizzo NULL per copiarla in app.
    Ma l' accesso all' indirizzo NULL causa il segmentation fault, non stiamo parlando di memoria allocata.
    Se vuoi avere una stringa vuota fai:
    codice:
    strcpy(app,"");

  7. #7
    E' stata la prima cosa che ho provato, non funziona.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Dovresti postare il codice completo di main e typedef (ovvero TUTTO il codice), inserendolo tra i tag CODE (come da regolamento e per poterlo leggere ...).

    E poi dovresti dire chiaramente se hai questo crash o hai un valore errato a video ...

    Se la domanda non è chiara ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Ho risolto creando una funzione che formatta ogni singolo carattere della stringa, e nemmeno inserendo il carattere "" (così non funziona!). Codice:

    void format(stringa str){ //formattazione stringa
    for(int j=0;j<98;j++)
    str[j]=char(NULL);
    }

    Ma mi sembra "insana" come soluzione. Posto il codice completo.

    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    #include <string.h>

    using namespace std;

    typedef char stringa[100];

    int iniz_mat(stringa nfile,int **&m,int &nr,int *&v_colu);
    int r_count(stringa nfile);
    int c_count(stringa nfile,int *&v_colu);
    void vet_stamp(int *v,int n);
    void format(stringa str);

    int main(int argc, char *argv[])
    {
    int **m,nr,*v_colu; //m è la matrice che conterrà i valori prelevati dal file, nr è il numero di righe, *v_colu il vettore che per ogni riga segna il numero di colonne
    stringa nfile; //nome file
    strcpy(nfile,"ges.txt");
    iniz_mat(nfile,m,nr,v_colu);
    cout << "\n";
    system("PAUSE");
    return EXIT_SUCCESS;
    }

    int iniz_mat(stringa nfile,int **&m,int &nr,int *&v_colu){
    nr=r_count(nfile);
    v_colu=new int[nr];
    m=new int*[nr];
    c_count(nfile,v_colu);
    vet_stamp(v_colu,nr);
    }

    int r_count(stringa nfile){ //conta le righe
    stringa app;
    strcpy(app,"");
    int i=0;

    ifstream file(nfile);
    while(!file.eof()){
    file.read(app,1);
    if(!strcmp(app,"\n"))
    i++;
    }
    i++;
    file.close();

    return i;
    }

    int c_count(stringa nfile,int *&v_colu){ //conta le colonne
    stringa app;
    int i=0,k=0;

    format(app);

    fstream file(nfile,ios::in);
    while(!file.eof()){
    file.read(app,1);
    cout << "app: " << app << endl;
    if(!strcmp(app,"\n")||file.eof()){
    v_colu[i]=k;
    i++;
    k=0;
    }
    else if(!strcmp(app," "))
    k++;
    format(app);
    }
    i++;
    file.close();
    }

    void format(stringa str){ //formattazione stringa
    for(int j=0;j<98;j++)
    str[j]=char(NULL);
    }

    void vet_stamp(int *v,int n){
    for(int i=0;i<n;i++)
    cout << v[i] << " ";
    cout << "\n";
    }

    Grazie ancora per l'aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.