PDA

Visualizza la versione completa : [c++] Sistema di I/O


andry80
02-04-2005, 19:18
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

Ramk0
02-04-2005, 19:34
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));
}
}

Ramk0
02-04-2005, 19:38
mmmm ma forse quello che ti ho detto è c non c++

Ramk0
02-04-2005, 19:41
potresti leggere le righe come stringhe, il primo carattere della stringa se è '#' lo ignori, alla seconda usi atoi e lo converti in intero....

andry80
03-04-2005, 10:55
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;

netarrow
03-04-2005, 11:25
volendo puoi fare così:



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.

:ciauz:

andry80
04-04-2005, 09:43
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".

Loading