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

Σκαλωμα με String


christian-ago

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

Δημοσ.

Αυτο που θελω να κανω στο προγραμμα ειναι να διαβαζει μια συμβολοσειρα που δινει ο χρηστης και αν αυτη περιέχει χαρακτήρα διάφορο του 'x' ή του 'y' να τον πληροφορει οτι ειναι λαθος.

Αν παλι, ειναι σωστη η συμβολοσειρά, μια συναρτηση θα μετραει τις εμφανισεις του y.

Και αν ειναι ζυγος ο αριθμος των εμφανισεων, να εκτυπωνει μηνυμα επιτυχιας.

Το προβλημα δεν το εχω, νομιζω, στη συμβολοσειρα, οσο στο οτι καλειται η παραπανω συναρτηση ακομα και αν η συμβολοσειρα ειναι λαθος.

Eγω θελω να καλειται μονον οταν η συμβολοσειρα ειναι σωστη, δηλαδη περιεχει x ή y. Εχω τροποποιησει δεκαδες φορες τον κωδικα, πραγματικα δεν ξερω τι φταιει.

 

>#include <iostream>
#include <string>

using namespace std;

void even (int number);

int main(int argc, char *argv[])
{
   int i=0, k=0, n=0;
   string temp;
   cout<<"Please insert a string :"<<"\n";
  
   getline (cin, temp);
   i = temp.length();

   for (n; n<i; n++)
   {        
      if ((temp.at(n)!='x') &&  (temp.at(n)!='y'))
      cout<<"Error"<<endl;
      break;
   }

   for (n; n<i; n++)
           
      if (temp.at(n)=='y')     
           k++;
           even(k);
}

void even (int number)
{
    if (number%2==0)
    cout<<"Sucess"<<endl;
    else
    cout<<"Failure"<<endl;
}

Δημοσ.

Με μια ματια στον κωδικα σου μπορω να πω οτι κουραστηκα.

Ο αινσταιν ειπε:κανε τα πραγματα απλα ...πιο απλα αλλα μέχρι εκει.

 

Αυτο που σου λέω εγω είναι να απλοποιησεις τον κώδικα γιατι σε ενα ευκολο πρόβλημα ψάχνεις δυσκολες λύσεις.

 

Και δεν ειναι σωστο να καλεις κάθε φορά την function.Τρώς χρόνο.

 

Απλά όσο πιο απλά γίνεται.

Δημοσ.

>
   for (n; n<i; n++)
   {        
      if ((temp.at(n)!='x') &&  (temp.at(n)!='y'))
      cout<<"Error"<<endl;
      break;
   }

 

Έχεις λογικό λάθος εδώ. Σύμφωνα με την εκφώνησή σου, αν φτάσεις στο "Error", το πρόγραμμά σου θα έπρεπε και να τερματίσει. Εσύ όμως κάνεις απλά break από το for loop, οπότε το πρόγραμμα θα συνεχίσει και θα εκτελεστούν και όλες οι επόμενες εντολές (2ο for loop κλπ). Κανονικά, θα ήθελες κάτι σαν το παρακάτω:

 

>
   for (n; n<i; n++)
       if ((temp.at(n)!='x') &&  (temp.at(n)!='y')) {
           cout << "Error" << endl;
           return 1;
       }

 

 

Επίσης:

1. Γιατί δύο for loops; Αυτό που θέλεις να κάνεις βγαίνει πολύ εύκολα και με ένα

2. Το indentation στη γραμμή όπου καλείς τη συνάρτηση even είναι λίγο off. Μπέρδεψες και τον φίλο papalive που νόμισε ότι καλείται πολλές φορές :-)

Δημοσ.

Θελω το προγραμμα να πληροφορει το χρηστη οτι η συμοβoλοσειρα που εδωσε ειναι λαθος και να σταματαει εκει, στο μηνυμα λαθους, δεν θελω να κανει εξοδο απο το προγραμμα. Κι επισης αυτο που λες, η συναρτηση even θελω να καλειται μια φορα μονο, οταν η συμβολοσειρα ειναι σωστη. Ειναι μοιραια τα λαθη μου αλλα καταλαβετε οτι ειναι ουτε ενας μηνας που μαθαινω C++. :-(

Δημοσ.

αν κατάλαβα καλά τι θες πρέπει να είναι αυτό

>
#include <iostream>
#include <string>

using namespace std;

void even (int number);

int main(int argc, char *argv[]){
   int i=0, k=0, n=0;
   int error=0;
   string temp;
   cout<<"Please insert a string :"<<"\n";
   getline (cin, temp);
   i = temp.length();
   for (n=0;n<i;n++){        
      if ((temp.at(n)!='x') &&  (temp.at(n)!='y')){
          cout<<"Error you must suply string with x,y only."<<endl;
          error=1;
          break;
      }
   }

   if (error==0){
       for (n=0; n<i; n++)
           if (temp.at(n)=='y') k++;
           even(k);
   }
           getchar();getchar();
}


void even (int number){
    if (number%2==0)
    cout<<"Sucess"<<endl;
    else
    cout<<"Failure"<<endl;
}


Δημοσ.

Ναι αυτο ακριβως ειναι, virxen75, πραγματικα με εχεις βοηθησει παρα πολυ. Απ' οτι καταλαβα ειναι παντα καλο να αρχικοποιουμε τις μεταβλητες. Τι αλλα λαθη τραγικα ειχα γιατι ανησυχω μηπως τα ξανακανω. Ευχαριστω και παλι.

Δημοσ.
Θελω το προγραμμα να πληροφορει το χρηστη οτι η συμοβoλοσειρα που εδωσε ειναι λαθος και να σταματαει εκει, στο μηνυμα λαθους, δεν θελω να κανει εξοδο απο το προγραμμα.

 

Το «να σταματάει εκεί» που γράφεις δε βγάζει και πολύ νόημα! Να σταματάει μέχρι ο χρήστης να κάνει τί; Να πατήσει κάποιο πλήκτρο; Δεν καταλαβαίνω τη λογική πίσω από αυτό.

 

Μήπως εκτελείς το πρόγραμμά σου μέσα από κάποιο IDE (ολοκληρωμένο περιβάλλον ανάπτυξης) και το παράθυρο κονσόλας κλείνει αμέσως μετά τον τερματισμό του προγράμματος, γι' αυτό και «τσίνισες» μόλις διάβασες τη λέξη «τερματισμός»; Επειδή θεωρείς ότι θα κλείσει το παράθυρο πριν προλάβει ο χρήστης να διαβάσει το μήνυμα λάθους; Αν ναι, τότε χρησιμοποιείς σε εκείνο το σημείο τις δύο διαδοχικές getchar που έχει βάλει και ο virxen75. Ή έναν system-specific τρόπο για το «πάγωμα» της εκτέλεσης (π.χ. σε περιβάλλον Windows μπορείς με system("pause"); )

Δημοσ.
Το «να σταματάει εκεί» που γράφεις δε βγάζει και πολύ νόημα! Να σταματάει μέχρι ο χρήστης να κάνει τί; Να πατήσει κάποιο πλήκτρο; Δεν καταλαβαίνω τη λογική πίσω από αυτό.

 

Μήπως εκτελείς το πρόγραμμά σου μέσα από κάποιο IDE (ολοκληρωμένο περιβάλλον ανάπτυξης) και το παράθυρο κονσόλας κλείνει αμέσως μετά τον τερματισμό του προγράμματος, γι' αυτό και «τσίνισες» μόλις διάβασες τη λέξη «τερματισμός»; Επειδή θεωρείς ότι θα κλείσει το παράθυρο πριν προλάβει ο χρήστης να διαβάσει το μήνυμα λάθους; Αν ναι, τότε χρησιμοποιείς σε εκείνο το σημείο τις δύο διαδοχικές getchar που έχει βάλει και ο virxen75. Ή έναν system-specific τρόπο για το «πάγωμα» της εκτέλεσης (π.χ. σε περιβάλλον Windows μπορείς με system("pause"); )

 

εγώ πάντως κατάλαβα ότι θέλει να εντοπίσει το λάθος ότι δηλαδή δεν είναι όλοι

οι χαρακτήρες χ ή y και να προσπεράσει τον κώδικα που λέει αν τα y είναι ζυγά χωρίς

να τερματίσει το πρόγραμμα (π.χ. exit(1); , return 0;)

 

θέλει με απλά λόγια να δημιουργήσει ένα goto .

 

Προφανώς μετά από αυτό θα υπάρχει και άλλος κώδικας να εκτελεστεί τον οποίο δεν αναφέρει εδώ.

Δημοσ.
Προφανώς μετά από αυτό θα υπάρχει και άλλος κώδικας να εκτελεστεί τον οποίο δεν αναφέρει εδώ.

 

Αν ισχύει κάτι τέτοιο, πάω πάσο!

Δημοσ.

Δεν ανεφερα τον κωδικα για το pause στην οθονη, το:

>  system("PAUSE");
   return EXIT_SUCCESS;

 

Αλλα δεν ηταν αυτο το σημαντικο. Αυτο που ηθελα στην ουσια ειναι να φευγει

απο το πρωτο loop, γιατι τη βαση του προγραμματος την ειχα φταξει. Αρχικα δοκιμασα, goto, exit() κλπ. αλλα τελικα ηταν η θεση των μπλοκς.

Δημοσ.

OK, καλά το υποπτεύθηκε ο virxen75 τότε. Και η χρήση του "error" flag μπορεί να σε βοηθήσει και στα κατοπινά σημεία του κώδικά σου, αν χρειαστεί ξανά (μετά τη μέτρησης των y) να λάβεις «αποφάσεις» βάσει της «λανθασμένης» ή μη εισόδου.

Δημοσ.

Σε ενα λάθος μην χτίζεις σωστα πράγματα.Ενημερώστε το παιδί πως είναι λάθος ολα.Απο την στιγμή που ξέρει 5 πράγματα οδηγειστε τον σε δρόμους αντικειμενοστρεφείς.Τωρα καθεστε και του λετε ξέχασα το pause και χεστηκε η φοραδα στο αλονι.Κανει την προσπαθεια του ο νεαρος ξερω αλλα εμαθε το αλφαβητο, ξέρει να λεει Α Β Γ Δ Ε Ζ Η Τ Ι Κ Λ Μ Ν Ξ Ο Π Ρ ... μην του λέτε λέξεις τυπου ΔΕΒΓΖΣ.

 

Στο λάθος σωστο δεν χτιζεται εσεις οι νεαροι παραπανω.Καταλαβατε νεαροι??????????????

Δημοσ.

Δείξε κώδικα φίλε να σε νιώσουμε ή έστω, γράψε σε φυσική γλώσσα τον αλγόριθμο που έχεις στο μυαλό σου για τη λύση του προβλήματος του topic starter με πιο απλό/σωστό τρόπο. Καλά τα Αϊνστάινεια δόγματα περί «απλότητας» και οι «Δρόμοι της Αντικειμενοστρέφειας», αλλά ως τώρα δύο μηνύματα έγραψες και τίποτα δεν είπες. Μας τη λες κι από πάνω, ότι βάλαμε τη φοράδα να τα κάνει στο αλώνι και μπερδέψαμε τον topic starter!

Δημοσ.

Για να μου λες ολα αυτα παει να πει πως δεν καταλαβες τι ηθελα να πω.Με τα δυο μηνυματα αφου δεν καταλαβες τι θελω να πω παει να πει πως εχεις βλαβη.Δεν πειραζει.

Κωδικα δεν ξέρω.Τι ειναι ο κωδικας??

Τι ειναι τα διαγραμματα????

 

( Καλυτερα που εχω πρόβατα και τα βοσκαω παρα να κάθομαι να postaro τις μαλ..... σου στον ανθρωπο )

 

Ο δρομος που του δειχνεις νεαρε ειναι λάθος.

Μην κάνεις POST γιατι δεν εισαι καλος οδηγος.Θα το τραυματισεις το παιδι.Αρχισε να περνας πλακακια.

 

ΚΑΙ ΔΕΝ ΣΕ ΧΑΡΙΖΩ ΝΕΑΡΕ ΜΟΥ ΤΙΠΟΤΑ.ΕΙΣΑΙ ΝΕΑΡΟΣ ΓΛΥΣΤΡΑΣ ΠΑΝΩ ΣΤΑ ΛΑΔΙΑ ΚΑΙ ΠΑΤΑΣ PAUSE.

 

Σε φυσικη γλωσσα ετσι και αλλιως δεν μπορω να τα γραψω γιατι εισαι καλωδιο και δεν θα καταλαβεις.

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

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

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