×
Επεξεργασία Προφίλ Επεξεργασία Avatar Επεξεργασία Υπογραφής Επεξεργασία Επιλογών E-mail και Κωδικός Ρυθμίσεις Ειδοποιήσεων
×
Αποσύνδεση Οι Συνδρομές μου Το Προφίλ μου Τα Posts μου Τα Threads μου Λίστα Επαφών Αντιδράσεις σε Posts μου Παραθέσεις των Posts μου Αναφορές σε Εμένα Ενέργειες Συντονιστών Αόρατος Χρήστης
Τι;
Πως;
Ταξινόμηση
Που;
Σε συγκεκριμένη κατηγορία;
Ποιος;
Αποτελέσματα Αναζήτησης
Συμπληρώστε τουλάχιστον το πεδίο Τι;

Το e-steki είναι μια από τις μεγαλύτερες ελληνικές διαδικτυακές κοινότητες με 67,803 μέλη και 2,441,144 μηνύματα σε 76,706 θέματα. Αυτή τη στιγμή μαζί με εσάς απολαμβάνουν το e-steki άλλα 254 άτομα.

Καλώς ήρθατε στο e-steki!

Εγγραφή Βοήθεια

Βόηθεια σε άσκηση C++(αρχεια)

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 17:38, 12-12-07:

#1
Δοκιμάστε να φτιάξετε ένα μικρό πρόγραμμα που θα γράφει πολλαπλές γραμμές σε ένα αρχείο
(διαχωρισμένες μεταξύ τους με ʽ\nʼ). Στην συνέχεια, το ίδιο πρόγραμμα, θα διαβάζει από αυτό το
αρχείο, γραμμή-γραμμή, και θα τις εκτυπώνει στην οθόνη.

Βοήθεια:
Χρησιμοποιήστε τις ακόλουθες συναρτήσεις της κλάσης ifstream:
· void getline(buffer, MAX), όπου:
o buffer: μεταβλητή τύπου char[] ή char*, μέσα στην οποία θα αποθηκευτεί η κάθε
γραμμή όταν διαβαστεί.
o MAX: μια σταθερά που προσδιορίζει τον μέγιστο αριθμό χαρακτήρων που θα πρέπει
να διαβαστούν μέχρι να συναντήσει end of line.
· int eof(), η οποία μας επιστρέφει 0 αν ο αρχείο έχει τελειώσει

Μπορει καποιος να με βοηθησει σ'αυτην την ασκηση,για να μπορεσω να την κανω;
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

gsova (Γιώργος)

Δραστήριο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 38 ετών και επαγγέλεται Προγραμματιστής/τρια . Έχει γράψει 672 μηνύματα.

O gsova έγραψε: στις 17:40, 12-12-07:

#2
Τις γραμμές που θα αποθηκεύονται στο αρχείο θα τις εισάγει ο χρήστης από την οθόνη;
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 17:45, 12-12-07:

#3
μαλλον ναι
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

gsova (Γιώργος)

Δραστήριο Μέλος

Ο Γιώργος αυτή τη στιγμή δεν είναι συνδεδεμένος Είναι 38 ετών και επαγγέλεται Προγραμματιστής/τρια . Έχει γράψει 672 μηνύματα.

O gsova έγραψε: στις 17:49, 12-12-07:

#4
για δές εδώ: http://www.arachnoid.com/cpptutor/student2.html

προς το μέσο της σελίδας...
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 18:49, 12-12-07:

#5
Ευχαριστω για την βοηθεια!

Χρησιμοποιησα τα εξεις δυο προγραμματα για να κανω την ασκηση:

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;
}

Και παλι σε ευχαριστω πολυ!
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 20:46, 12-12-07:

#6
#include<fstream>
#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 το
πλήθος των χαρακτήρων που θα διαβαστούν με την μια.

αυτο το ερωτημα πως θα το κανω;
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 3,895 μηνύματα.

O Bill έγραψε: στις 00:49, 13-12-07:

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

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 11:31, 13-12-07:

#8
ευχαριστω θα το δοκιμασω στον κωδικα μου

#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();
}

δηλαδη καπως ετσι θα ειναι ο κωδικας;
edited Τελευταία επεξεργασία από το χρήστη teo : 13-12-07 στις 11:38.
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 3,895 μηνύματα.

O Bill έγραψε: στις 12:56, 13-12-07:

#9
Ναι ουσιαστικά αλλάζει μόνο το κομμάτι στο οποίο διάβαζες χαρακτήρα-χαρακτήρα.
Τρέξε τον κώδικα για να δεις ότι είναι οκ γιατί δεν τον έχω δοκιμάσει.

#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(); }
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 16:21, 13-12-07:

#10
#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 ((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'
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 3,895 μηνύματα.

O Bill έγραψε: στις 02:13, 15-12-07:

#11
Το bold(τώρα ειναι το σωστο) πριν ήταν το λάθος.
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 (( fin.read( reinterpret_cast<char*>(buf), BUFSIZE)) > 0){ cout<<"Copy completed : "<<100*percent/finsize<<"\r"; percent++; } fin.close(); fout.close(); } Το compile το εκανα σε visual studio 2005.
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 16:52, 15-12-07:

#12
Ευχαριστω! Εκανα RUN το προγραμμα αλλα δεν μου αντιγραφη τα περιεχομενα του αρχειου.

δηλ. εστω οτι το αρχειο file1.txt εχει σαν δεδομενο την φραση hello world οταν στο command prompt δωσω την εντολη program2.cpp file1.txt file2.txt , στο αρχειο file2.txt δεν υπαρχουν τα περιεχομενα του file1.txt.

Ευχαριστω!
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 3,895 μηνύματα.

O Bill έγραψε: στις 17:15, 15-12-07:

#13
Ναι γιατι ελειπε η write που θα γραψει στο αρχειο εξόδου σου.

#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){ fout.write(reinterpret_cast<char*>(buf),n); cout<<"Copy completed : "<<100*percent/finsize<<"\r"; percent++; } fin.close(); fout.close(); } Το compile έγινε σε visual studio 2005.
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 17:17, 15-12-07:

#14
kαι παλι δεν αντιγραφη το αρχειο file1.txt
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 17:25, 15-12-07:

#15
help bill
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 18:36, 29-06-08:

#16
εστω οτι εχω τον παρακατω κωδικα

#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;
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 3,895 μηνύματα.

O Bill έγραψε: στις 19:06, 29-06-08:

#17
Σου έκανε compile με τα header μαζί με το .h;

#include<fstream>
#include<iostream> 
Αυτό που κάνει η γραμμή που λες είναι να καταχωρεί από το αρχείο μια τιμή στη μεταβλητή i.


Το αρχείο αποκτάει τις τιμές από αυτό το κομμάτι κώδικα:

  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 από το αρχείο και συνεχίζει με την εκτέλεση των υπόλοιπων εντολών.
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 19:48, 29-06-08:

#18
ναι μου εκανε κανονικα την μεταγλαττιση του κωδικα απλα μου εβγαλε και καποιο worning

τελος σπαντον

αυτο που θες να πεις ειναι οτι πτωτα στην μεταβλητη i θα αποθηκευτη ο αριθμος 1 μετα ο 2 κοκ.

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


στην πρωτη εκτελεση της do while η μεταβλητη j γινεται 1 και μετα 0 κοκ? εχω μπερδευτη λιγακι εως πολυ αν και ειναι απλο παραδειγμα
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

Bill

Διακεκριμένο μέλος

Ο Bill αυτή τη στιγμή δεν είναι συνδεδεμένος Έχει γράψει 3,895 μηνύματα.

O Bill έγραψε: στις 20:06, 29-06-08:

#19
Οι τιμές του i που αθροίζονται ειναι 3,7 και 11.

To j αυξάνεται κατά ένα μέχρι να γίνει 3.Τότε θα γίνει η πρώτη άθροιση και το j θα πάρει την τιμή -1.
Aυξάνει πάλι κατά ένα μέχρι να ξαναγίνει 3 για να ξαναμπεί στο if , όπου στο sum θα προστεθεί το 7.Ομοίως και για το 11.
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση

teo (Θοδωρής)

Δραστήριο Μέλος

Ο Θοδωρής αυτή τη στιγμή δεν είναι συνδεδεμένος Επαγγέλεται Φοιτητής/τρια . Έχει γράψει 426 μηνύματα.

O teo έγραψε: στις 21:12, 29-06-08:

#20
οκ κατανοητο να σε καλα
Πρέπει να συνδεθείτε για να αντιδράσετε σε μηνύματα
Παράθεση
Απάντηση στο θέμα


Χρήστες

  • Τα παρακάτω 0 μέλη και 1 επισκέπτες διαβάζουν μαζί με εσάς αυτό το θέμα.
     
  • (View-All Tα παρακάτω 0 μέλη διάβασαν αυτό το θέμα τις τελευταίες 30 μέρες:
    Μέχρι και αυτή την στιγμή δεν έχει δει το θέμα κάποιο ορατό μέλος