Page 1 of 3

Απορίες σε απλά πραγματάκια σε C++

Posted: Sun Sep 21, 2008 12:44 pm
by para

Code: Select all

    cin >> metavliti;
    while (metavliti<1 || metavliti>50)
    {
        cout << "Minima1" << endl << "Minima2";
        cin >> metavliti;
    }
Οκ..

Απ' αυτό αν δώσω τιμή -1 στη μεταβλητή παίρνω το εξής:
Minima1
Minima2Minima1
Minima2Minima1
...

Γιατί δεν περιμένει να πάρει ξανά τιμή απ' το cin;
Πώς να καταφέρω αυτό που θέλω;

--------------

2η απορία:

Code: Select all

    char** table = new char*[megethos];
    for (unsigned i=0;i<megethos;i++)
    {
        cin >> table[i];
    }
Εδώ δε μου βάζει το τρίτο στοιχείο στον πίνακα αν δώσω οποιοδήποτε megethos>=3

--------------

3η απορία:
Γιατί κάνει 10 ώρες να αρχίσει το run? :smt013 :smt013

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Sun Sep 21, 2008 3:55 pm
by cyberpython
1:
Το παρακάτω δουλεύει μια χαρά :

Code: Select all

#include <iostream>
using namespace std;

int main(){
	int metavliti;
	cin >> metavliti;
	while (metavliti<1 || metavliti>50)
	{
		cout << "Minima1" << endl << "Minima2" << endl;
		cin >> metavliti;
	}
	return 0;
}
Έκδοση g++ :
g++ (GCC) 4.2.3 (Ubuntu 4.2.3-2ubuntu7)


Αποτελέσματα:

ImageImage


2:
Η C++ έχει strings(οπότε δε βλέπω το λόγο να παιδεύεσαι με char*). Δες το παρακάτω:

Code: Select all

#include <iostream>
#include <cstdlib>
#include<string>
using namespace std;

int main(){
	unsigned megethos;
	char temp[100];
	
	cin.getline(temp,100);
	megethos = atoi(temp);
	
	string table[megethos];		
	for (unsigned i=0;i<megethos;i++)
	{		
		getline(cin,table[i]);
	}
	
	cout << "------------------------------------" << endl;
	
	for (unsigned i=0;i<megethos;i++)
	{		
		cout << table[i] << endl;		
	}	
		
	cout << "---------------THE END---------------" << endl;
	return 0;
}
Αποτελέσματα:

ImageImage


3: Μάλλον χρησιμοποιείς MSVC

Edit: Ρίξε μια ματιά σε αυτό

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Sun Sep 21, 2008 6:17 pm
by para
1. Είχα ορίσει τη μεταβλητή unsigned οπότε στην είσοδο -1 τα έπαιζε, λογικό :oops: :oops:
Συγγνώμη για την ταλαιπωρία :???:

2. Δε χρησιμοποίησα την atoi, αλλά το υπόλοιπο που μου έδωσες λειτούργησε κανονικά με την προσθήκη ενός cin.ignore(); (ειδάλλως έτρωγε μια γραμμή).
Ευχαριστώ για τη βοήθεια :smt002 :-)

3. Dev-C++ αλλά το συνήθισα το "περίμενε" πλέον, οπότε οκ :ρ

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Sun Oct 05, 2008 11:32 pm
by proskopos
Έχω αυτό το παράδειγμα

Code: Select all

#include <iostream>
using namespace std;

int main ()
{
  int firstvalue, secondvalue;
  int * mypointer;

  mypointer = &firstvalue;
  *mypointer = 10;
  mypointer = &secondvalue;
  *mypointer = 20;
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}
Αυτό θα εμφανίσει τα

Code: Select all

firstvalue is 10
secondvalue is 20
Δεν μπορώ να καταλάβω γιατί η αλλαγή του *mypointer σε 10 (δηλαδή η διεύθυνση στην μνήμη που δείχνει ο operator mypointer), αλλάζει και την τιμή του firstvalue.. Αφού το τι τιμή θα έχει το firstvalue δεν δηλώνεται...
Εν συνεχεία το ίδιο γίνεται και με τον secondvalue...! Μπορεί κάποιος να μου το εξηγήσει...;
Είχα βρεί προηγουμένος ότι αν για παράδειγμα έχουμε σαν παράμετρο μιας διαδικασίας μια μεταβλητή με το & μπροστά, τότε η αλλαγή της επιρρεάζει την μεταβλητή αυτή και μέσα και έξω από την διαδικασία... Αλλά τώρα το & έχει μπεί για να δείξει τον τύπο του operator...
Μάλλον βέβαια κάνει την ίδια δουλειά αλλά μπορεί κάποιος να μου το εξηγήσει στα σίγουρα...;
Επίσης αν ήταν ο κώδικας έτσι:

Code: Select all

]#include <iostream>
using namespace std;

int main ()
{
  int firstvalue, secondvalue;
  int * mypointer;

  mypointer = *firstvalue;
  *mypointer = 10;
  mypointer = *secondvalue;
  *mypointer = 20;
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}
τι θα γινόταν...;

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Sun Oct 05, 2008 11:46 pm
by para

Code: Select all

  mypointer = &firstvalue;
  *mypointer = 10;
Ο δείκτης mypointer δείχνει στο περιεχόμενο της διεύθυνσης της firstvalue.
Αλλάζοντας την τιμή αυτού που δείχνει ο δείκτης, δεν καταλαβαίνω πού είναι το παράλογο να μην αλλάξει αυτό το περιεχόμενο.
Δεν είναι μεταβλητή το mypointer να πεις ότι πήρε μια τιμή και μετά λειτουργεί ανεξάρτητα, στην ίδια θέση μνήμης αναφέρονται και τα δύο.

Καλύτερα: Ο mypointer έχει για τιμή μια διεύθυνση (τη διεύθυνση της firstvalue) και το περιεχόμενο της διεύθυνσης είναι το *mypointer (η τιμή της firstvalue). Το *mypointer εδώ παθαίνει ό,τι το firstvalue κι ανάποδα.

Αν δεν έγινα κατανοητός πες μου :χ

--

Code: Select all

  mypointer = *firstvalue;
  *mypointer = 10;
Το * δεν μπορεί να μπει μπροστά από το firstvalue. O compiler θα πετάξει invalid type argument of `unary *'

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Sun Oct 05, 2008 11:58 pm
by proskopos
para wrote:

Code: Select all

  mypointer = &firstvalue;
  *mypointer = 10;
Ο δείκτης mypointer δείχνει στο περιεχόμενο της διεύθυνσης της firstvalue.
Αλλάζοντας την τιμή αυτού που δείχνει ο δείκτης, δεν καταλαβαίνω πού είναι το παράλογο να μην αλλάξει αυτό το περιεχόμενο.
Δεν είναι μεταβλητή το mypointer να πεις ότι πήρε μια τιμή και μετά λειτουργεί ανεξάρτητα, στην ίδια θέση μνήμης αναφέρονται και τα δύο.

Αν δεν έγινα κατανοητός πες μου :χ
Ναι αυτό καταλαβαίνω και εγώ αλλά μου φαίνεται περίεργο λόγω της σειράς των εντολών... Δηλαδή αλλάζει η τιμή μιας μεταβλητής, που κατόπιν δεν μεταβάλεται καθόλου... Κατάλαβα τι λες πάντως ευχαριστώ...!
τώρα έχω μια ακόμα απορία...
στο παρακάτω πρόγραμμα εγώ θα έβαζα τις τιμές των απαντήσεων ανάποδα.... Μου το εξηγείς και αυτό...;

Code: Select all

include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 = address of firstvalue
  p2 = &secondvalue; // p2 = address of secondvalue
  *p1 = 10;          // value pointed by p1 = 10
  *p2 = *p1;         // value pointed by p2 = value pointed by p1
  p1 = p2;           // p1 = p2 (value of pointer is copied)
  *p1 = 20;          // value pointed by p1 = 20
  
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}
και αποτελέσματα:

Code: Select all

firstvalue is 10
secondvalue is 20
Αυτό που καταλαβαίνω εγώ είναι:
Ή τιμή του pointer p1 γίνεται η διεύθυνση στην μνήμη του firstvalue (αντίστοιχα και το p2), εν συνεχεία η διεύθυνση στην μνήμη που δείχνει ο p1 γίνεται 10 (δηλαδή και το &firstvalue == 10), μετά και η διεύθυνση στην μνήμη που δείχνει ο p2 γίνεται 10... (Άρα και &secondvalue == 10) Ύστερα η τιμή του p1 γίνεται ίση με την τιμή του p2... (άγνωστη τιμή...) Και στο τέλος η διεύθυνση στην μνήμη που δείχνει ο p1 γίνεται 20.. Άρα και &firstvalue == 20...
Άρα εμένα μου βγαίνουν ανάποδα... Τις πταίει...; :)

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Mon Oct 06, 2008 12:05 am
by para

Code: Select all

include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 == διεύθυνση της fv. *p1 == fv == 5
  p2 = &secondvalue; // p2 == διεύθυνση της sv. *p2 == sv == 15
  *p1 = 10;          // *p1 == 10. fv == 10
  *p2 = *p1;         // *p2 == 10. sv == 10. 
  p1 = p2;           // O p1 δείχνει εκεί που δείχνει και ο p2, δηλαδή στο sv
  *p1 = 20;          // άρα *p1 == 20 σημαίνει ότι θα αλλάξει η τιμή του sv (γιατί σε αυτό έδειχνε ο p2) σε 20. ( sv == 20 )
  
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}
και αποτελέσματα:

Code: Select all

firstvalue is 10
secondvalue is 20

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Mon Oct 06, 2008 12:10 am
by proskopos
para wrote:

Code: Select all

include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 == διεύθυνση της fv. *p1 == fv == 5
  p2 = &secondvalue; // p2 == διεύθυνση της sv. *p2 == sv == 15
  *p1 = 10;          // *p1 == 10. fv == 10
  *p2 = *p1;         // *p2 == 10. sv == 10. 
  p1 = p2;           // O p1 δείχνει εκεί που δείχνει και ο p2, δηλαδή στο sv
  *p1 = 20;          // άρα *p1 == 20 σημαίνει ότι θα αλλάξει η τιμή του sv (γιατί σε αυτό έδειχνε ο p2) σε 20. ( sv == 20 )
  
  cout << "firstvalue is " << firstvalue << endl;
  cout << "secondvalue is " << secondvalue << endl;
  return 0;
}
και αποτελέσματα:

Code: Select all

firstvalue is 10
secondvalue is 20
Και πάλι έχεις απόλυτο δίκιο.... Και πάλι ευχαριστώ... :-D :)

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Mon Oct 06, 2008 10:07 pm
by proskopos
Αν θέλω να φτιάξω μια δυναμική μνήμη που να δέχεται ακέραιους (σε έναν πίνακα), και να έχω έναν pointer στην αρχή...
Γράφω πχ...

Code: Select all

bobby = new int [5];
αυτό συνέχεια θα ανανεώνει τις θέσεις μνήμης κατα 5, και αν κάποια στιγμή η μνήμη "τελειώσει" θα βγάλει exception και θα τερματίσει το πρόγραμμα...

Ενώ αν έγραφα..

Code: Select all

bobby = new (nothrow) int [5]; 
και η μνήμη "τελείωνε", αντί για exception και τερματισμό του προγράμματος, θα έβγαζε έναν null pointer και το πρόγραμμα θα συνέχιζε κανονικά...
Σωστά το έχω καταλάβει...;
Επίσης τι νόημα θα έχει στον δέυτερο τρόπο ο null pointer...; Επίσης πως θα καταλάβουμε το σφάλμα, αφου δεν θα έχουμε exception η κάτι προειδοποιητικό....;
Spoiler: εμφάνιση/απόκρυψη
Περιμένοντας τον πάρα να απαντήσει... :-D
edit: Το πως θα καταλάβουμε το σφάλμα, το βρήκα... Θα τσεκάρουμε την τιμή του pointer, ώστε αν είναι 0 να γίνεται μια συγκεκριμένη πράξη... (αν υπάρχει και άλλος τρόπος, παρακαλώ πείτε μου...)

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Tue Oct 07, 2008 1:23 am
by para
proskopos wrote:Αν θέλω να φτιάξω μια δυναμική μνήμη που να δέχεται ακέραιους (σε έναν πίνακα), και να έχω έναν pointer στην αρχή...
Γράφω πχ...

Code: Select all

bobby = new int [5];
αυτό συνέχεια θα ανανεώνει τις θέσεις μνήμης κατα 5, και αν κάποια στιγμή η μνήμη "τελειώσει" θα βγάλει exception και θα τερματίσει το πρόγραμμα...
Αυτό θα απαιτήσει απ' τη μνήμη 5 θέσεις για int και αν υπάρχει χώρος για 5 θέσεις τότε προχωράει κανονικά, αν όχι συνεχίζει με την περίπτωση του null pointer που λες παρακάτω ή σταματάει με exception.
Αν υπάρχει χώρος, κάθε στοιχείο που βάζεις μετά απ' αυτά τα 5 θα απαιτεί απ' τη μνήμη μόνο 1 θέση, όχι καινούρια 5άδα. Διορθώστε με αν κάνω λάθος.
proskopos wrote:Ενώ αν έγραφα..

Code: Select all

bobby = new (nothrow) int [5]; 
και η μνήμη "τελείωνε", αντί για exception και τερματισμό του προγράμματος, θα έβγαζε έναν null pointer και το πρόγραμμα θα συνέχιζε κανονικά...
Σωστά το έχω καταλάβει...;
Ναι

Επίσης τι νόημα θα έχει στον δέυτερο τρόπο ο null pointer...;
Γλιτώνεις απ' το να σταματήσει να εκτελείται το πρόγραμμά σου, αν εννοείς γιατί τον δεύτερο αντί τον πρώτο.
Αν εννοείς γιατί να επιστρέφει null pointer το new, για να πάρει τιμή ο bobby που περιμένει.

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 12:38 am
by proskopos
Προσπάθησα να τρέξω το παρακάτω και το netbeans μου έβγαζε κάτι "κουλά" (νομίζω) σφάλματα...

Code: Select all

#include <map>
#include <iostream>
#include <string>
#include <fstream>
int main() 
{
    map<string, unsigned> wordOccurrences;
    string line;
    ifstream inFile("file1.txt");
    // Μετράω πόσες φορές εμφανίζεται η κάθε λέξη:
    while(getline (inFile,line)
    {
       wordOccurrences[line]++; 
    }
    cout <<  wordOccurrences[line];
}
Βασικά θέλω να διαβάζει γραμμές από ένα αρχείο και όσες γραμμές είναι ίδιες να αυξάνει τον μετρητή τους (που βρίσκεται στον map... Και στην έξοδο να μου βγάλει απλά τα περιεχόμενα του map, δηλαδήι γραμμή και πόσες φορές εμφανίστηκε....

Και μου βγάζει για σφάλματα..

Code: Select all

Running "C:\cygwin\bin\make.exe  -f Makefile CONF=Debug" in C:\......

/usr/bin/make -f nbproject/Makefile-Debug.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/c/....mkdir -p build/Debug/Cygwin-Windows
g++.exe    -c -g -o build/Debug/Cygwin-Windows/newfile.o newfile.cpp
newfile.cpp: In function `int main()':
newfile.cpp:7: error: `map' undeclared (first use this function)
newfile.cpp:7: error: (Each undeclared identifier is reported only once for each function it appears in.)
newfile.cpp:7: error: `string' undeclared (first use this function)
newfile.cpp:7: error: expected primary-expression before "unsigned"
newfile.cpp:7: error: expected `;' before "unsigned"
newfile.cpp:8: error: expected `;' before "line"
newfile.cpp:9: error: `ifstream' undeclared (first use this function)
newfile.cpp:9: error: expected `;' before "inFile"
newfile.cpp:11: error: `inFile' undeclared (first use this function)
newfile.cpp:11: error: `line' undeclared (first use this function)
newfile.cpp:11: error: `getline' undeclared (first use this function)
newfile.cpp:12: error: expected `)' before '{' token
newfile.cpp:13: error: `wordOccurrences' undeclared (first use this function)
newfile.cpp:15: error: `cout' undeclared (first use this function)
make[1]: *** [build/Debug/Cygwin-Windows/newfile.o] Error 1
make[1]: Leaving directory `/cygdrive/c/........
make: *** [.build-impl] Error 2

Build failed. Exit value 2.


Δεν καταλαβαίνω το γιατί... Μπορεί κάποιος (para :) :?: ) να μου το εξηγήσει...;

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 1:02 am
by netharis
Καταρχάς έχεις ένα συντακτικό λάθος, στο while έχεις ξεχάσει μία παρένθεση.

Code: Select all

while(getline (inFile,line))
{
wordOccurrences[line]++;
}
To map, καθώς και το string είναι στο standard namespace, άρα κάτω απο τα preprocessor directives, βάλε

Code: Select all

using namespace std;
Χωρίς να το έχω δοκιμάσει, πιστεύω οτι θα κάνει compile τουλάχιστον.

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 1:05 am
by para

Code: Select all

using namespace std
:?:

---

ok, με πρόλαβαν :-p

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 1:13 am
by proskopos
Δίκιο είχατε.... para την επόμενη σε θέλω ταχύτερο... :-D
Έλεος, και τόση ώρα το έψαχνα... Το ποιο απλό πράγμα.... :smt013

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 1:16 am
by para
Έπαιζα στο zoo :-#

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 2:11 pm
by proskopos
Προσπαθώ να εμφανίσω τα περιεχόμενα ενός σετ, που έχει και εναν Iterator... Κάνω λοιπόν το εξής...:

Code: Select all

set<string>::const_iterator setIterator;
for(setIterator = s.begin(); setIterator != s.end(); setIterator++)
{
    cout << *setIterator << endl;
  
}
Και εμφανίζονται κανονικά...
Αν όμως βγάλω το endl ώστε να συνεχίσω στην ίδια γραμμή να εμφανίσει και άλλα, μου ενφανίζει μόνο τα άλλα.. πχ αν βάλω...

Code: Select all

  cout << *setIterator << "blabla " << endl;
μου βγάζει πρώτα το blabla και μετά τα περιεχόμενα του Iterator... Γιατί....;
Πως θα το κάνω να μου τα βγάζει κανονικά....;

Επίσης, πως μπορώ να αλλάζω το αρχείο εισόδου ανάλογα με τα περιεχόμενα ενός πίνακα, ή σετ, η αρχείου... Οτιδήποτε δηλαδή...
Θέλω κάτι σαν το...
ifstream inFile (τιτλος αρχείου 1)
και αυτός ο τίτλος να αλλάζει διαρκώς με την σειρά βέβαια που βρίσκονται οι τίτλοι σε αυτό το πίνακα (κτλ) ανά γραμμή...

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Wed Oct 08, 2008 11:26 pm
by para
proskopos wrote:Αν όμως βγάλω το endl ώστε να συνεχίσω στην ίδια γραμμή να εμφανίσει και άλλα, μου ενφανίζει μόνο τα άλλα.. πχ αν βάλω...

Code: Select all

  cout << *setIterator << "blabla " << endl;
μου βγάζει πρώτα το blabla και μετά τα περιεχόμενα του Iterator... Γιατί....;
Πως θα το κάνω να μου τα βγάζει κανονικά....;
Αν βάλεις

Code: Select all

cout << *setIterator;
cout << "blabla " << endl;
?

--

Το υπόλοιπο μετά το zoo :x

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Thu Oct 09, 2008 12:13 am
by proskopos
para wrote:
proskopos wrote:Αν όμως βγάλω το endl ώστε να συνεχίσω στην ίδια γραμμή να εμφανίσει και άλλα, μου ενφανίζει μόνο τα άλλα.. πχ αν βάλω...

Code: Select all

  cout << *setIterator << "blabla " << endl;
μου βγάζει πρώτα το blabla και μετά τα περιεχόμενα του Iterator... Γιατί....;
Πως θα το κάνω να μου τα βγάζει κανονικά....;
Αν βάλεις

Code: Select all

cout << *setIterator;
cout << "blabla " << endl;
?

--

Το υπόλοιπο μετά το zoo :x
To δοκίμασα δεν κάνει τίποτα διαφορετικό... :smt021

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Thu Oct 09, 2008 12:38 am
by Bloody Mary
Δεν ξέρω πώς ακριβώς να στο εξηγήσω για να το καταλάβεις.. (Το έχω λίγο μπερδεμένο στο μυαλό μου!)
Φαντάσου πως όλα τα αποτελέσματα που προκύπτουν από την επανάληψη του iterator είναι μια οντότητα. Όλα μαζί. Οπότε τα αποτελέσματα της επανάληψης σου θα εμφανιστούν όταν ολοκληρωθεί ολόκληρη η επανάληψη του iterator. Το *setIterator μεταβάλλεται σε κάθε βρόχο της επανάληψης. Το "blabla" όμως παραμένει αμετάβλητο. Αυτό έχει ως αποτέλεσμα την πρώτη φορά που θα εκτελεστεί η εντολή σου

Code: Select all

cout << *setIterator << "blabla " << endl;
Να εκτυπωθεί ως αποτέλεσμα σου το "blabla". Στη συνέχεια θα συνεχίσει να εκτελείται κανονικά η επανάληψη σου μέχρι να ολοκληρωθεί. Όταν θα ολοκληρωθεί η επανάληψη, τότε θα εμφανιστεί η οντότητα - τα αποτελέσματα δηλαδή που θα έχουν προκύψει από το *setIterator. Απλά πρέπει να έχεις στο μυαλό σου ότι ό,τι προκύψει από το *setIterator θεωρείται όλο μαζί ως το αποτέλεσμα της επαναληψης σου.. Δεν μπορείς δλδ να πάρεις π.χ. μόνο το αποτέλεσμα του *setIterator στην τρίτη εκτέλεση της επαναληψης σου. Όχι τουλάχιστον εφόσον χρησιμοποιείς Iterators για την επαναληψη σου.
Ελπίζω να βγαίνει άκρη από αυτό που έγραψα.. :roll: Και να βοήθησα λίγο... Τα υπόλοιπα θα τα αναλάβει ο para πάλι :-p

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Thu Oct 09, 2008 12:43 am
by proskopos
Κατάλαβα πολύ καλά τι εννοείς.... Ωστόσο, εγώ αυτό που κάνω τώρα είναι να σπάω τις περσινές εργασίες σε κομμάτια και κάθε ένα να το κάνω με όποιον τρόπο βρω... Έπρεπε λοιπόν να γράψουν σε μια σειρά το εξής...:

Code: Select all

<message file="…" category="spam" features="m">
Όπου το περιεχόμενο του message file βγαίνει με την βοήθεια iterator...τουλάχιστον έτσι το προσπαθώ εγώ....!!!
Οπότε....? Τι κάνω...;

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Thu Oct 09, 2008 1:00 am
by para
proskopos wrote:Επίσης, πως μπορώ να αλλάζω το αρχείο εισόδου ανάλογα με τα περιεχόμενα ενός πίνακα, ή σετ, η αρχείου... Οτιδήποτε δηλαδή...
Θέλω κάτι σαν το...
ifstream inFile (τιτλος αρχείου 1)
και αυτός ο τίτλος να αλλάζει διαρκώς με την σειρά βέβαια που βρίσκονται οι τίτλοι σε αυτό το πίνακα (κτλ) ανά γραμμή...

Code: Select all

	for(unsigned i=0; i<(*vector1).size(); i++)
	{
		ifstream arxeio((*vector1)[i].c_str()); 
      [..]
	}
Αυτό τουλάχιστον εμένα μου λειτουργεί

---
proskopos wrote:Κατάλαβα πολύ καλά τι εννοείς.... Ωστόσο, εγώ αυτό που κάνω τώρα είναι να σπάω τις περσινές εργασίες σε κομμάτια και κάθε ένα να το κάνω με όποιον τρόπο βρω... Έπρεπε λοιπόν να γράψουν σε μια σειρά το εξής...:

Code: Select all

<message file="…" category="spam" features="m">
Όπου το περιεχόμενο του message file βγαίνει με την βοήθεια iterator...τουλάχιστον έτσι το προσπαθώ εγώ....!!!
Οπότε....? Τι κάνω...;
μου εμφανίζεται κανονικά με το (*vector1) :x

---

Δεν ξέρω αν είναι σωστά αυτά έτσι, χωρίς iterators, αλλά δουλεύουν και στις δύο περιπτώσεις

Re: Απορίες σε απλά πραγματάκια σε C++

Posted: Thu Oct 09, 2008 10:26 am
by proskopos

Code: Select all

int main()
{
    
    string titles;
    ifstream inFile("spmsga1.txt");
    vector<string>message_title;
    vector<string>::iterator it;
    while (getline(inFile, titles))
    {
        message_title.push_back(titles);
        
        
        for(it=message_title.begin() ; it < message_title.end(); it++ )
        {
            ifstream inFile(*it.c_str()); 
        }
               
        
        
    }
:smt021 :smt013 Επέστρεψα και πάλι δυναμικά....
Το παραπάνω γιατί δεν λειτουργεί...; Λογικά το σφάλμα θα είναι στο

Code: Select all

ifstream inFile(*it.c_str());
Όπως και παραπάνω αυτό που θέλω είναι να ανοίγει τα αρχεία των οποίων ο τίτλος φαίνεται από τον iterator...
Μάλλον θα περιμένω το βράδυ τον πάρα να τελειώσει από το zoo και μετά να απαντήσει....!!! :smt005 :)
Με έχει συνεπάρει αυτή η γλώσσα.... χ0χ0, πολύ φαντεζί.... Καίγομαι... :smt016 :smt005
Ώρα να πάμε και σχεδιάση επιχειρησιακών εφαρμογών... Λαλαλαλα.... :-D