Προς το περιεχόμενο

C ++ και τελευταια τιμή αρχείου


Technology fan

Προτεινόμενες αναρτήσεις

Δημοσ.

Εχω ένα προβληματάκι με το παρακάτω:

>#include <iostream>
#include <fstream>
#include <string>

using namespace std;

main()
{
     
     ofstream outputfile;
     outputfile.open("test.txt",ios_base::out);
     if (outputfile)
     {
           [color="Blue"]outputfile<<"5 6"<<endl;      [/color]  
           cout <<"output file opened succesfully"<<endl; 
           outputfile.close(); 
     }
     else
         cout << "could not open file"<<endl;
     cout<<"hello"<<endl;
     
     
     int a;
     [color="Red"]//char a[30];[/color]
     cout <<"after closing file"<<endl;
     ifstream inputfile;
     inputfile.open("test.txt",ios_base::in);
     if(inputfile)
     {
              cout <<"input file opened succesfully"<<endl;
              cout <<"periexei ta parakatw:"<<endl;
              while(!(inputfile.eof()))
              {
                  [color="Red"]//strcpy(a,"");[/color]      
                  inputfile>>a;
                  cout<<a<<" ";
                  
              }
              inputfile.close();      
     }
     else
     {
         cout << "could not open input file"<<endl;
     }
     system("pause");
}

 

στο τέλος εκτυπώνεται δύο φορές το 6, παρ 'όλα αυτά όταν αλλάζω την μπλε γραμμή χωρίς endl τότε γίνεται μια χαρα.

Επίσης, όταν α είναι char τότε το σχόλιο (κόκκινη γραμμη) το διορθώνει, τι μπορώ να κάνω εκτός απο το προφανής να μη βάζω endl εγγράφοντας το αρχείο?

Δημοσ.

Το αρχείο που έχεις ανοίξει για output λειτουργεί σωστά.

Γραφεις "5 6\n"

 

Οταν διαβάζεις όμως, ελέγχεις αν έχεις eof (που ακόμα και μετά το 6 δεν έχεις eof), οπότε στην 3η επανάληψη, δεν διαβάζει 6 απο το αρχείο, αλλά αποτυγχάνει η ανάγνωση αριθμού και το a μένει απείραχτο με την τελευταία τιμή του.

Δημοσ.
Το αρχείο που έχεις ανοίξει για output λειτουργεί σωστά.

Γραφεις "5 6\n"

 

Οταν διαβάζεις όμως, ελέγχεις αν έχεις eof (που ακόμα και μετά το 6 δεν έχεις eof), οπότε στην 3η επανάληψη, δεν διαβάζει 6 απο το αρχείο, αλλά αποτυγχάνει η ανάγνωση αριθμού και το a μένει απείραχτο με την τελευταία τιμή του.

 

>while(!(inputfile.eof()))
              {    
            if (a != eof){
                  inputfile>>a;
                  cout<<a<<" ";
             }
              }

 

Κάτι τέτοιο εννοεί ο bxenos...

Δημοσ.

Αν θέλεις να αντιγράψεις το αρχείο στην cout μπορείς να χρησιμοποιήσεις την rdbuf().

 

>// ...
   ifstream inputfile;
   inputfile.open("test.txt",ios_base::in);
   if(inputfile)
   {
       cout <<"input file opened succesfully"<<endl;
       cout <<"periexei ta parakatw:"<<endl;
       cout << inputfile.rdbuf();

       inputfile.close();
   }
// ...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...