Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [c++] Sistema di I/O

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152

    [c++] Sistema di I/O

    Salve a tutti!!
    Avrei un 2 problemini!!
    1)
    Immaginiamo di avere 3 file di testo:
    prova_0.txt, prova_1.txt, prova_2.txt

    E' possibile aprire uno stream e quindi leggere
    in uno dei 3 file in questo modo:??

    for(int i=0,i<3,i++){
    ifstream in("prova_+i");}


    2)
    Se un file di questi è , ad esempio , organizzato nel modo seguente:

    # zero prova0
    234

    (Ha solo 2 righe)

    e dichiaro un array e una variabile così:
    char arr[100];
    int x;

    Come posso fare per inserire esclusivamente il valore 234 nella variabile x ?????

    Ringrazio chiunque voglia darmi una mano
    andry80

  2. #2
    bah secondo me dovresti usare strcat e dovresti prima convertire i da int a char... itoa mi pare che lo fa...

    esempio
    #include <stdlib.h>
    #include <string>
    #include <iostream>
    using namespace std;
    void main(void){
    int i;
    char ich[3];
    itoa(i,ich,10);
    for(i=0,i<3,i++){
    ifstream in(strcat("prova_",ich));
    }
    }

  3. #3
    mmmm ma forse quello che ti ho detto è c non c++

  4. #4
    potresti leggere le righe come stringhe, il primo carattere della stringa se è '#' lo ignori, alla seconda usi atoi e lo converti in intero....

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152
    C'è un modo per far si che leggendo il carattere '#' venga ignorata la riga intera????

    Se, invece , utilizzo il getline così:

    in.getline(arr,20)
    in >> x;
    andry80

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    volendo puoi fare così:

    codice:
    int x;
    string str;
    while(getline(in, str)) {
    if(str[0] == '#') continue;
    else
    x = atoi(str.c_str());
    }
    attenzione che getline si ferma anche se trova uno spazio, cmq basta usare altre funzioni che leggono le stringhe e guardi il primo carattere, se per caso cambi funzione molto probabilmente avrà come parametro un char*(NON usare gets che è bacata), quindi non avrai la comodità della OOP e dell'oggetto string, inoltre se gestirai male l'input del file si potresti cadere in un buffer overflow.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152
    Ho risolto nel seguente modo MA....... :


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <iostream.h>
    #include <fstream.h>
    #include <string>

    main(){

    char arr[50];
    char ind[25];
    float x;
    ofstream out("output.asc");
    for(int i=0;i<5;i++)
    {
    for(int j=0;i<5;j++)
    {
    sprintf(ind,"prova_%d%d.txt",i,j);
    ifstream in(ind);
    if (!in) cout << "Impossibile aprire il file";
    in.getline(arr,20);
    for(int z=0;z<1;z++)
    {
    in >> x;
    }

    out << x << " ";
    x = 0x00;
    memset(ind,0x00,25);
    memset(arr,0x00,50);
    in.close();
    }
    }


    }

    Il problema ora è che, una volta compilato senza errori e mandato in esecuzione , mi viene stampato a schermo, Impossibile aprire il file in loop continuo.
    Andando ad aprire il file output.asc che è stato creato ho una cosa del genere:

    324 324 324 324 324 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 00 0 0 0 0 0 0 0 0 ...........

    come se non riuscisse più ad aprire il file a partire da "prova_10.asc".
    andry80

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.