Visualizza la versione completa : [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
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));
}
}
mmmm ma forse quello che ti ho detto è c non c++
potresti leggere le righe come stringhe, il primo carattere della stringa se è '#' lo ignori, alla seconda usi atoi e lo converti in intero....
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:
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".