teo
Πολύ δραστήριο μέλος


(διαχωρισμένες μεταξύ τους με ʽ\nʼ). Στην συνέχεια, το ίδιο πρόγραμμα, θα διαβάζει από αυτό το
αρχείο, γραμμή-γραμμή, και θα τις εκτυπώνει στην οθόνη.
Βοήθεια:
Χρησιμοποιήστε τις ακόλουθες συναρτήσεις της κλάσης ifstream:
· void getline(buffer, MAX), όπου:
o buffer: μεταβλητή τύπου char[] ή char*, μέσα στην οποία θα αποθηκευτεί η κάθε
γραμμή όταν διαβαστεί.
o MAX: μια σταθερά που προσδιορίζει τον μέγιστο αριθμό χαρακτήρων που θα πρέπει
να διαβαστούν μέχρι να συναντήσει end of line.
· int eof(), η οποία μας επιστρέφει 0 αν ο αρχείο έχει τελειώσει
Μπορει καποιος να με βοηθησει σ'αυτην την ασκηση,για να μπορεσω να την κανω;
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gsova
Δραστήριο μέλος



Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
gsova
Δραστήριο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος








Χρησιμοποιησα τα εξεις δυο προγραμματα για να κανω την ασκηση:
program1.cpp
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream ofs("data.txt");
for(int i =1;i <= 10;i++) {
ofs << "This is line " << i << endl;
}
return 0;
}
program2.cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ifstream ifs("data.txt");
string line;
while(getline(ifs,line)) {
cout << "[ " << line << " ]" << endl;
}
return 0;
}
[SIZE=-1]Και παλι σε ευχαριστω πολυ![/SIZE]
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


#include<iostream>
using namespace std;
int main(int argc,char *argv[])
{
if(argc!=3){
cout<<"Usage:CopyFile <from> <to>"<<endl;
return 0;
}
ifstream fin(argv[1]);
if(fin==0){
cout<<"Error: Input file cannot be opened for reading!"<<endl;
return 10;
}
ofstream fout(argv[2]);
if(fout==0){
cout<<"Error: Output file cannot be opened for writing!"<<endl;
return 10;
}
fin.seekg(0,ios::end);
size_t finsize=fin.tellg();
cout<<"Input file size: "<<finsize<<endl;
fin.seekg(0,ios::beg); // ios::beg -> from the start of the file
int c;
int percent=0;
while(fin.eof()==false)
{
c=fin.get();
if(fin.eof()==false)
fout.put(c);
cout<<"Copy completed : "<<100*percent/finsize<<"\r";
percent++;
}
fin.close();
fout.close();
}
Δοκιμάστε να αλλάξετε τον παραπάνω κώδικα, ώστε η συνάρτηση get() να μην διαβάζει ένα
χαρακτήρα την φορά αλλά ένα μπλόκ χαρακτήρων (π.χ. 512 bytes/χαρακτήρες). Χρησιμοποιήστε την
συνάρτηση ifstream::read(buf, bufsize) όπου buf είναι ένας πίνακας τύπου char, και το bufsize το
πλήθος των χαρακτήρων που θα διαβαστούν με την μια.
αυτο το ερωτημα πως θα το κανω;

Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Αντί του μπλοκ που διαβάζεις χαρακτήρα-χαρακτήρα.
{
char buf[BUFSIZE];
int n;
while ((n = ifstream::read(0, buf, BUFSIZE)) > 0) /* ανάγνωση από το αρχείο σου, όπου BUFSIZE το μέγεθος που θες */
ifstream::write( 1, buf, n); /*εγγραφή στο stream εξόδου*/
exit(0);
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


#include<fstream>
#include<iostream>
using namespace std;
int main(int argc,char *argv[])
{
char buf[BUFSIZE];
int n;
if(argc!=3){
cout<<"Usage:CopyFile <from> <to>"<<endl;
return 0;
}
ifstream fin(argv[1]);
if(fin==0){
cout<<"Error: Input file cannot be opened for reading!"<<endl;
return 10;
}
ofstream fout(argv[2]);
if(fout==0){
cout<<"Error: Output file cannot be opened for writing!"<<endl;
return 10;
}
fin.seekg(0,ios::end);
size_t finsize=fin.tellg();
cout<<"Input file size: "<<finsize<<endl;
fin.seekg(0,ios::beg); // ios::beg -> from the start of the file
int c;
int percent=0;
while ((n = ifstream::read(0, buf, BUFSIZE)) > 0){ /* ανάγνωση από το αρχείο σου, όπου BUFSIZE το μέγεθος που θες */
ifstream::write( 1, buf, n); /*εγγραφή στο stream εξόδου*/
exit(0);
cout<<"Copy completed : "<<100*percent/finsize<<"\r";
percent++;
}
fin.close();
fout.close();
}
δηλαδη καπως ετσι θα ειναι ο κωδικας;
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


Τρέξε τον κώδικα για να δεις ότι είναι οκ γιατί δεν τον έχω δοκιμάσει.
#include<fstream>
#include<iostream>
using namespace std;
int main(int argc,char *argv[])
{
char buf[BUFSIZE];
int n;
if(argc!=3){
cout<<"Usage:CopyFile <from> <to>"<<endl;
return 0;
}
ifstream fin(argv[1]);
if(fin==0){
cout<<"Error: Input file cannot be opened for reading!"<<endl;
return 10;
}
ofstream fout(argv[2]);
if(fout==0){
cout<<"Error: Output file cannot be opened for writing!"<<endl;
return 10;
}
fin.seekg(0,ios::end);
size_t finsize=fin.tellg();
cout<<"Input file size: "<<finsize<<endl;
fin.seekg(0,ios::beg); // ios::beg -> from the start of the file
int c;
int percent=0;
while ((n = ifstream::read(0, buf, BUFSIZE)) > 0){ /* ανάγνωση από το αρχείο σου, όπου BUFSIZE το μέγεθος που θες */
ifstream::write( 1, buf, n); /*εγγραφή στο stream εξόδου*/
cout<<"Copy completed : "<<100*percent/finsize<<"\r";
percent++;
}
fin.close();
fout.close();
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


#include<iostream>
#define BUFSIZE 100
using namespace std;
int main(int argc,char *argv[])
{
char buf[BUFSIZE];
int n;
if(argc!=3){
cout<<"Usage:CopyFile <from> <to>"<<endl;
return 0;
}
ifstream fin(argv[1]);
if(fin==0){
cout<<"Error: Input file cannot be opened for reading!"<<endl;
return 10;
}
ofstream fout(argv[2]);
if(fout==0){
cout<<"Error: Output file cannot be opened for writing!"<<endl;
return 10;
}
fin.seekg(0,ios::end);
size_t finsize=fin.tellg();
cout<<"Input file size: "<<finsize<<endl;
fin.seekg(0,ios::beg); // ios::beg -> from the start of the file
int c;
int percent=0;
while ((n = ifstream::read(0, buf, BUFSIZE)) > 0){ /* áíÜãíùóç áðü ôï áñ÷åßï óïõ, üðïõ BUFSIZE ôï ìÝãåèïò ðïõ èåò */
ifstream::write(1,buf,n); /*åããñáöÞ óôï stream åîüäïõ*/
cout<<"Copy completed : "<<100*percent/finsize<<"\r";
percent++;
}
fin.close();
fout.close();
}
Εχω δηλωση το BUFSIZE σαν σταθερα δηλ. #define BUFSIZE 100
Οταν ομως κανω Compile(Dev-C++) μου βγάζει τα εξεις μυνηματα λαθους:
35 D:\Temp\TEI OF ATHENS_CS\Ä å÷\C++\PROGRAMS FOR C++ (ERGASTIRIO)\pr52\Untitled1.cpp no matching function for call to `std::basic_istream<char, std::char_traits<char> >::read(int, char[100], int)'
36 D:\Temp\TEI OF ATHENS_CS\Ä å÷\C++\PROGRAMS FOR C++ (ERGASTIRIO)\pr52\Untitled1.cpp `write' is not a member of `std::ifstream'
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


H read επρεπε να καλεστει ως συναρτηση του fin.
#include<fstream>
#include<iostream>
#define BUFSIZE 100
using namespace std;
int main(int argc,char *argv[])
{
char buf[BUFSIZE];
int n;
if(argc!=3){
cout<<"Usage:CopyFile <from> <to>"<<endl;
return 0;
}
ifstream fin(argv[1]);
if(fin==0){
cout<<"Error: Input file cannot be opened for reading!"<<endl;
return 10;
}
ofstream fout(argv[2]);
if(fout==0){
cout<<"Error: Output file cannot be opened for writing!"<<endl;
return 10;
}
fin.seekg(0,ios::end);
size_t finsize=fin.tellg();
cout<<"Input file size: "<<finsize<<endl;
fin.seekg(0,ios::beg); // ios::beg -> from the start of the file
int c;
int percent=0;
while (( [B]fin.read( reinterpret_cast<char*>(buf), BUFSIZE))[/B] > 0){
cout<<"Copy completed : "<<100*percent/finsize<<"\r";
percent++;
}
fin.close();
fout.close();
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


δηλ. εστω οτι το αρχειο file1.txt εχει σαν δεδομενο την φραση hello world οταν στο command prompt δωσω την εντολη program2.cpp file1.txt file2.txt , στο αρχειο file2.txt δεν υπαρχουν τα περιεχομενα του file1.txt.
Ευχαριστω!
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.



#include<fstream>
#include<iostream>
#define BUFSIZE 100
using namespace std;
int main(int argc,char *argv[])
{
char buf[BUFSIZE];
int n;
if(argc!=3){
cout<<"Usage:CopyFile <from> <to>"<<endl;
return 0;
}
ifstream fin(argv[1]);
if(fin==0){
cout<<"Error: Input file cannot be opened for reading!"<<endl;
return 10;
}
ofstream fout(argv[2]);
if(fout==0){
cout<<"Error: Output file cannot be opened for writing!"<<endl;
return 10;
}
fin.seekg(0,ios::end);
size_t finsize=fin.tellg();
cout<<"Input file size: "<<finsize<<endl;
fin.seekg(0,ios::beg); // ios::beg -> from the start of the file
int c;
int percent=0;
while (( fin.read( reinterpret_cast<char*>(buf), BUFSIZE)) > 0){
[I]fout.write(reinterpret_cast<char*>(buf),n);[/I]
cout<<"Copy completed : "<<100*percent/finsize<<"\r";
percent++;
}
fin.close();
fout.close();
}
Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


Σημείωση: Το μήνυμα αυτό γράφτηκε 17 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


#include<fstream.h>
#include<iostream.h>
using namespace std;
int main(void)
{
ofstream out_file;
ifstream in_file;
int i,j,sum;
bool done;
out_file.open("test.dat");
for(i=1;i<4;i++){
for(j=1;j<=4;j++)
out_file<<4*(i-1)+j<<' ';
cout<<endl;
}
out_file.close();
in_file.open("test.dat");
done=false;
j=0;
sum=0;
do{
in_file>>i;
if(in_file.eof())done=true;
else j++;
if(j%3==0 && j>0){
sum+=i;
j=-1;
}
}while (!done);
in_file.close();
cout<<sum<<endl;
system("PAUSE");
}
αυτο που θελω να μου εξηγησει καποιος προς το παρον ειναι τι δουλεια κανει το in_file>>i;
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


#include<fstream>
#include<iostream>
Το αρχείο αποκτάει τις τιμές από αυτό το κομμάτι κώδικα:
out_file.open("test.dat");
for(i=1;i<4;i++){
for(j=1;j<=4;j++)
out_file<<4*(i-1)+j<<' ';
cout<<endl;
}
out_file.close();
1 2 3 4 5 6 7 8 9 10 11 12
Έτσι σε κάθε loop που συναντάει το in_file>>i καταχωρεί την επόμενη τιμή στο i από το αρχείο και συνεχίζει με την εκτέλεση των υπόλοιπων εντολών.
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
teo
Πολύ δραστήριο μέλος


τελος σπαντον
αυτο που θες να πεις ειναι οτι πτωτα στην μεταβλητη i θα αποθηκευτη ο αριθμος 1 μετα ο 2 κοκ.
κατι αλλο τωρα η εξοδος στην οθονη οσων αφορα για την μεταβλητη sum ειναι 21 (1+2+3+4+5+6=21) . γιατι παιρνει τα 6 πρωτα?
στην πρωτη εκτελεση της do while η μεταβλητη j γινεται 1 και μετα 0 κοκ? εχω μπερδευτη λιγακι εως πολυ αν και ειναι απλο παραδειγμα

Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.


To j αυξάνεται κατά ένα μέχρι να γίνει 3.Τότε θα γίνει η πρώτη άθροιση και το j θα πάρει την τιμή -1.
Aυξάνει πάλι κατά ένα μέχρι να ξαναγίνει 3 για να ξαναμπεί στο if , όπου στο sum θα προστεθεί το 7.Ομοίως και για το 11.
Σημείωση: Το μήνυμα αυτό γράφτηκε 16 χρόνια πριν. Ο συντάκτης του πιθανόν να έχει αλλάξει απόψεις έκτοτε.
Χρήστες Βρείτε παρόμοια
-
Φορτώνει...
-
Το forum μας χρησιμοποιεί cookies για να βελτιστοποιήσει την εμπειρία σας.
Συνεχίζοντας την περιήγησή σας, συναινείτε στη χρήση cookies στον περιηγητή σας.