PDA

View Full Version : [C++] Domanda su DevC++, come leggere da file input?


ciuaz!!!
17-01-2008, 17:11
Ciao ragazzi, ho un problema: ho creato un programmetto sotto Linux, che legge da un file di testo un numero (es: 234. il punto segnala la fine) e me lo trasforma in binario.

...ora vorrei fare la stessa cosa sotto Windows e utilizzando DevC++, sapete come fare?
Quando eseguo il programma mi esce solo il file di output, che dovrebbe contenere -appunto- la trasformazione, ma NON RIESCO A FARGLI PRENDERE L'INPUT! :muro:

Per precisione, questo è il programma:

#include<iostream>
#include<fstream>
using namespace std;

int main()

try //apertura file

{
ifstream IN ("input");
ofstream OUT ("output");
if(!IN || ! OUT)
throw (0);

char x,b;
int r,n,a;
n=0;
IN>>x; // legge dal file
while (x != '.') {
n= (x-48)+n*10;
IN>>x;
}

IN.close();

while (n>0){
r=n%2;
b=r+48;
OUT<< b;
n=n/2;
}


OUT.close();


}
catch (int x) {cout<<"problemi con i file"<<x<<endl;}

cionci
17-01-2008, 23:28
Prima di tutto non è corretta la verifica dell'errore che fai. IN e OUT non possono essere NULL:
http://www.cplusplus.com/reference/iostream/ifstream/ifstream.html
La verifica dell'errore di apertura si fa con il membro fail.

A prima vista non vedo errori particolari...sicuro che ci sia il file "input" ?

ciuaz!!!
19-01-2008, 12:00
Prima di tutto non è corretta la verifica dell'errore che fai. IN e OUT non possono essere NULL:
http://www.cplusplus.com/reference/iostream/ifstream/ifstream.html
La verifica dell'errore di apertura si fa con il membro fail.

A prima vista non vedo errori particolari...sicuro che ci sia il file "input" ?

Io ho fatto solo questa parte del programma

char x,b;
int r,n,a;
n=0;
IN>>x; // legge dal file
while (x != '.') {
n= (x-48)+n*10;
IN>>x;
}

IN.close();

while (n>0){
r=n%2;
b=r+48;
OUT<< b;
n=n/2;
}

tutto il resto è del prof quindi non saprei dirti, è la prima volta che tocco il C++ :stordita:

Cmq il file input c'è, è nella stessa directory di questo programmetto. Sotto linux mi bastava creare un input.txt che aprivo col KATE, ci scrivevo ad esempio "328.", mi veniva fuori il file output che -sempre con KATE- conteneva la giusta sequenza di 1 e 0.

Ma sotto windows? Boh... mi hanno detto di eseguirlo dalla shell (start esegui cmd) però nel file di output non c'è scritto nulla..

cionci
19-01-2008, 12:02
Attento che su Windows il notepad ti mette automaticamente l'estensione txt ai file, non vorrei che il tuo avesse l'estensione ;)
In tal caso non te lo aprirebbe.

Digli al professore che ha sbagliato :) Professore universitario o delle superiori ?

ciuaz!!!
19-01-2008, 13:07
Universitario!
:eek:

E questo è un esercizio che ci ha dato da fare per casa e da consegnare lunedì :eek: :eek:
Però alla fine funziona...

Comunque ora dò una controllata al file, ti faccio sapere.

edit: è vero, il file ha l'estensione txt (lo vedo dalla shell) ma come si toglie :look:

edit 2: VITTORIAAAAAAAA CE L'HO FATTA :asd:
ho preso il file di output che ho rinominato in input e ora va !!!

cionci
19-01-2008, 13:46
Il modo corretto per il controllo dell'errore, mantenedo la struttura che ha usato lui con l'eccezione (che a me sinceramente non piace per niente):

ifstream IN ("input");
ofstream OUT ("output");
if(IN.fail() || OUT.fail())
throw (0);

Poi mai avrei dato un nome maiuscolo a quelle variabili...insomma...in bocca al lupo ;)