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

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

Δημοσ.

Σε περίπτωση που το switch σου πάει στην default, δεν γίνεται κάποια ανάθεση στην μεταβλητή και για αυτό σου γκρινιάζει. Αν κάνεις αρχικοποίηση της μεταβλητής εκεί που την δηλώνεις, θα είσαι οκ.

  • Like 1
  • Απαντ. 43
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Δεν δουλεύω VS... αλλά πάω στοίχημα ότι δεν λέει μόνο "unassigned" για την μεταβλητή. Λέει ότι δεν έχει τιμή ΠΡΙΝ χρησιμοποιηθεί.

 

Hint...

 

Εάν η μεταβλητή praksi δεν είναι στο [1, 4] (ακέραιες τιμές). Τι γίνεται στην προ-τελευταία γραμμή;

:confused:  Μα υποτίθεται πως άμα δεν είναι μεταξύ των 1 και 4, θα λειτουργήσει η goto για να γίνει ξανά η ερώτηση, μέχρι να είναι η εισαγωγή από 1 έως 4! Χμμ.. μάλλον θα ήταν καλύτερα να χρησιμοποιήσω βρόγχο λες ?

  • Moderators
Δημοσ.

Δεν έχει σχέση αυτό. Όταν πας να κάνεις compile, ο compiler βλέπει ότι χρησιμοποιείς μια μεταβλητή η οποία, at compile time, δεν έχει τιμή, γι' αυτό και σου χτυπάει.

 

 

Επίσης, είναι "βρόχος", όχι "βρόγχος". Βρόγχος είναι το πνευμόνι.

 

  • Like 1
Δημοσ.

Κάτι που βγάζει μάτι είναι τα labels που έχεις βάλει. Έχουμε 2016 και γράφεις C#, υπάρχουν ελάχιστοι λόγοι να χρησιμοποιήσεις goto, και η περίπτωσή σου δεν είναι ένας απ' αυτούς.

Δεύτερον, έχεις δύο switch για επιλογή πράξης. Η πράξη επιλέγεται στο πρώτο switch, γιατί δε βάζεις όλον τον κώδικα για τη συγκεκριμένη πράξη εκεί και έχεις και 2ο switch;

Μετά, έχεις εδώ

if (int.TryParse(arithmos1, out arithmos1a))
{

}

else
{
Console.WriteLine("H eisagogi den egine apodekti!");
goto ErotisiA;
}

Γιατί αυτό δεν το κάνεις

if (! int.TryParse(arithmos1, out arithmos1a))
{
Console.WriteLine("H eisagogi den egine apodekti!");
goto ErotisiA;
}

Επίσης εδώ

if (int.TryParse(arithmos2, out arithmos2a))
{

}

else if (arithmos2 == "0")
{
Console.WriteLine("Parakalo eisagete akeraiao diaforo tou midenos!");
goto ErotisiB;
}

Αν ο αριθμός είναι 0, το tryParse θα πετύχει, οπότε δεν ελέγχεις πουθενά αν ο αριθμός είναι 0.

 

Τα labels / goto τα χρησιμοποίησα γιατί είναι βολικά...

Θα μου πεις θα μπορούσα να χρησιμοποιήσω μια λούπα και για όσο δεν απαντά ο χρήστης κάτι από τις προεπιλογές, να ρωτά ξανά το ίδιο. Απλά η goto γράφεται πιο γρήγορα. :P

 

Τα δύο switch τα έβαλα επειδή το πρώτο είναι τοποθετημένο μεταξύ της ερώτησης πράξης και των ερωτήσεων αριθμών, και αν έβαζα στο πρώτο τις εκφράσεις του δεύτερου, δεν θα υπήρχε πρόβλημα, μιας και δεν θα είχε γίνει ακόμα ανάθεση στις τιμές των μεταβλητών ? Αν όμως απ' την άλλη προσέθετα τις εντολές του πρώτου στο δεύτερο, δεν θα ήξεραν οι ερωτήσεις αριθμών ποιο string να εμφανίσουν! Έτσι δεν είναι ?

 

Αν το 

 

 

 

Console.WriteLine("H eisagogi den egine apodekti!");

goto ErotisiA;

το βγάλω από την else και το βάλω στην if, οτιδήποτε και να εισάγω πάντα θα μου βγάζει ότι η εισαγωγή δεν είναι αποδεκτή, και θα έχει δημιουργηθεί μια infinite loop.

 

Ο έλεγχος για μηδέν όντως δεν λειτουργεί. :(

Δημοσ.

υ.γ. το πρόβλημα με την unnasigned 'apotelesma' το έλυσα με τη πρόταση του anon667.

 

Το καλό θα ήταν να το σκεφτείς μόνος σου... ;)

 

Ήξερες ότι παραπονιέται το VS γιατί δεν βλέπει τιμή για την μεταβλητή. Τι κάνεις για αυτό; Παίξε με 2, 3, 4, 5, ν λύσεις. Βρες ποια δουλεύει και γιατί. Βρες ποιες δεν δουλεύουν και γιατί.

 

 

Αυτή η προσέγγιση έχει νόημα.

 

Γενικά προσπάθησε να μην παίρνεις έτοιμες λύσεις χωρίς να καταλαβαίνεις τι γίνεται γιατί έτσι δεν θα μάθεις.

  • Like 1
Δημοσ.

Δεν έχει σχέση αυτό. Όταν πας να κάνεις compile, ο compiler βλέπει ότι χρησιμοποιείς μια μεταβλητή η οποία, at compile time, δεν έχει τιμή, γι' αυτό και σου χτυπάει.

 

 

Επίσης, είναι "βρόχος", όχι "βρόγχος". Βρόγχος είναι το πνευμόνι.

 

 

Έχεις δίκιο, έπρεπε να αρχικοποιήσω τη μεταβλητή νωρίτερα, όπως είπε και ο anon667.

  • Moderators
Δημοσ.

Δεν είναι το ίδιο condition στο if, έβαλα ένα ! μπροστά. Επίσης, δες τα μηνύματά σου. Όλα ξεκινάνε με τον ίδιο τρόπο, το μόνο που διαφοροποιείται είναι το τέλος. Θα μπορούσες να έχεις ένα string μηνύματος, στο οποίο θα κάνεις append αυτό που θες ανάλογα με την πράξη.

 

Αυτό που λες για τις 2 πράξεις, μπορείς να φτιάξεις ένα function το οποίο θα διαβάζει τους 2 αριθμούς του χρήστη, ανεξαρτήτως πράξης. Έτσι, μπορείς να την καλείς μέσα στο switch και να παίρνεις τους 2 αριθμούς σου.

 

Για το goto που λες ότι το γράφεις πιο γρήγορα κλπ, καλό θα ήταν να μην το χρησιμοποιείς. Ναι, μπορεί στο συγκεκριμένο παράδειγμα να σε βολεύει εσένα στον μικρό κώδικα που έχεις γράψει, αλλά σε βάζει σε ένα διαφορετικό mentality που δεν έχει σχέση με το δομημένο προγραμματισμό. Όσο προχωράς και σκέφτεσαι με goto, θα φτάσεις πολύ γρήγορα σε σημείο όπου θα καταριέσαι την ώρα και τη στιγμή που το χρησιμοποιήσες γιατί θα έχεις να κάνεις debug έναν τεράστιο κώδικα που δε θα μπορείς να ακολουθήσεις λόγω των goto που έβαλες "για πιο γρήγορα".

Δημοσ.

Το καλό θα ήταν να το σκεφτείς μόνος σου... ;)

 

Ήξερες ότι παραπονιέται το VS γιατί δεν βλέπει τιμή για την μεταβλητή. Τι κάνεις για αυτό; Παίξε με 2, 3, 4, 5, ν λύσεις. Βρες ποια δουλεύει και γιατί. Βρες ποιες δεν δουλεύουν και γιατί.

 

 

Αυτή η προσέγγιση έχει νόημα.

 

Γενικά προσπάθησε να μην παίρνεις έτοιμες λύσεις χωρίς να καταλαβαίνεις τι γίνεται γιατί έτσι δεν θα μάθεις.

Γενικά προσπαθώ να τα βρίσκω μόνος μου.

Απλά μερικές φορές... Να δοκίμασα να τρέξω το πρόγραμμα μετά τη πρώτη αλλαγή που έκανα, ώστε άμα πχ ο χρήστης εισάγει γράμματα να μη κρασάρει το πρόγραμμα, και δούλεψε καλά. Μετά είπα να βάλω και τα διαφορετικά strings, κάτι που μου φάνηκε 'αθώο', και δεν περίμενα πως έτσι θα χάλαγε κάτι με τις πράξεις και τις μεταβλητές αυτών, μιας και μόνο strings πείραξα. 

Δημοσ.

Δεν είναι το ίδιο condition στο if, έβαλα ένα ! μπροστά. Επίσης, δες τα μηνύματά σου. Όλα ξεκινάνε με τον ίδιο τρόπο, το μόνο που διαφοροποιείται είναι το τέλος. Θα μπορούσες να έχεις ένα string μηνύματος, στο οποίο θα κάνεις append αυτό που θες ανάλογα με την πράξη.

 

Αυτό που λες για τις 2 πράξεις, μπορείς να φτιάξεις ένα function το οποίο θα διαβάζει τους 2 αριθμούς του χρήστη, ανεξαρτήτως πράξης. Έτσι, μπορείς να την καλείς μέσα στο switch και να παίρνεις τους 2 αριθμούς σου.

 

Για το goto που λες ότι το γράφεις πιο γρήγορα κλπ, καλό θα ήταν να μην το χρησιμοποιείς. Ναι, μπορεί στο συγκεκριμένο παράδειγμα να σε βολεύει εσένα στον μικρό κώδικα που έχεις γράψει, αλλά σε βάζει σε ένα διαφορετικό mentality που δεν έχει σχέση με το δομημένο προγραμματισμό. Όσο προχωράς και σκέφτεσαι με goto, θα φτάσεις πολύ γρήγορα σε σημείο όπου θα καταριέσαι την ώρα και τη στιγμή που το χρησιμοποιήσες γιατί θα έχεις να κάνεις debug έναν τεράστιο κώδικα που δε θα μπορείς να ακολουθήσεις λόγω των goto που έβαλες "για πιο γρήγορα".

 

Ουπς! Έχεις δίκιο. Μου διέφυγε το ! λόγο κεκτημένης ταχύτητας.

 

Με τις μεθόδους και τις κλάσεις δεν είμαι αρκετά εξοικιωμένος ακόμα. Ξέρω πως να δημιουργώ ένα αντικείμενο μιας υπάρχουσας κλάσης, πως να καλώ μια μέθοδο, αλλά με το φτιάξιμο, τις παραμέτρους και τα arguments νέων μεθόδων / κλάσεων θέλω περισσότερο διάβασμα και εξάσκηση.

 

Βασικά ναι, για το goto είναι η συνήθεια. Πρέπει να το ξεσυνηθίσω από ότι φαίνεται. Τη συνήθεια του goto την απέκτησα γιατί την ήξερα από παλιότερα, όταν κάποτε ήμουν παιδί και προσπαθούσα να κάνω πράγματα σε έναν Amstrad που μου είχε δώσει ένας ξάδερφός μου, με BASIC 1.1. Η πρώτη μου επαφή με τον προγραμματισμό ήταν σε εκείνο τον Amstrad, όπου προσπαθούσα να φτιάξω mods για παιχνίδια που είχα σε αυτόν, πειράζοντας τον κώδικα! :P Ε και η χρήση της έχει παραμείνει η ίδια, και τη θυμόμουν από τόοοτε, και για αυτό την υιοθέτησα και εδώ. 

Δημοσ.

Χαχαχαχαχαχαχα!!!!

 

Κώδικας με γραμμές 1, 10, 20, 30, .., 100, 110, ..., 500

 

Goto line 100.

 

Αλλαγή στον κώδικα στην γραμμή 90. Νέες γραμμές πάνε: 90, 95, 100.

 

Αλλαγή στον κώδικα στην γραμμή 90. Νέες γραμμές πάνε: 90, 91, 92, 93, 94, 95.. Φτου! Δεν φτάνουν οι γραμμές!

 

 

Τι θύμησες τώρα...;!

  • Like 1
Δημοσ.

Ναι ναι είχες δυνατότητα να κάνεις μέχρι 9 προσθέσεις / αλλαγές!

Εποχές κι αυτές ε ? 

 

Τότε ήταν πιο εύκολο και γρήγορο να μάθεις και να ξεκινήσεις να φτιάχνεις πράγματα με τα βασικά, αλλά το διάβασμα και συντήρηση / μετατροπή υπαρχόντων προγραμμάτων πιο αργό και δύσκολο!

 

Τώρα είναι πιο δύσκολο και αργό να μάθεις τα βασικά, αλλά γρηγορότερη και ευκολότερη η συντήρηση και αλλαγή σε ήδη φτιαγμένα προγράμματα.

 

Ή απλά μου φαίνεται πιο δύσκολη η c# και ο αντικειμενοστραφισμός επειδή μεγάλωσα και δεν είμαι πια παιδάκι...

Δημοσ.

Να σε πω... δεν μπορώ να αξιολογήσω τι γινότανε τότε. Κυρίως γιατί ήμανε under 10 y.o. Αλλά θυμάμαι ακόμα πόσο frustrated γινόμανε όταν έπρεπε να σβήσω όλα τα νούμερα γραμμών επειδή ήθελα να αλλάξω κάτι ή να βάλω κάτι...

 

Tragic! Είχα πολύ φάση... αλλά tragic :P

Δημοσ.

 

Επισης πειτε μου αν εχετε καποια αλλη ιδεα για καποιο χαζο-προγραμμα για να πειραματιζομαι στην C#. Θα σας ειμαι υποχρεος

 

Ευχαριστω !

 

 

Ξεκίνα απο δώ...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

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