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

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

Δημοσ.

Καλησπερα,

 

Ως αρχαρια στον c προγραμματισμο δε μπορω να κατανοησω την εξης λειτουργια της εντολης return:

 

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

 

if(x<0) {

  printf("Type again\n");

  return -1;

}

 

Τι ακριβως κανει το "return -1;" σε αυτη την περιπτωση;;;

Δημοσ.

Ο ελεγχος για αρνητικο αριθμο μπορει να γινει  με μια συνάρτηση πχ: int arnitikos ( int x) η οποία στο σώμα της θα εχει τον κώδικα που εγραψες . Η συναρτηση μεσω της εντολής return θα επιστρεφει το -1 στο πρόγραμα που την καλεί. Γενικά η εντολή return τερματιζει μια συναρτηση και επιστρεφει ως τιμή το αποτελεσμα της παραστασης.

  • Like 1
Δημοσ.

Ο ελεγχος για αρνητικο αριθμο μπορει να γινει  με μια συνάρτηση πχ: int arnitikos ( int x) η οποία στο σώμα της θα εχει τον κώδικα που εγραψες . Η συναρτηση μεσω της εντολής return θα επιστρεφει το -1 στο πρόγραμα που την καλεί. Γενικά η εντολή return τερματιζει μια συναρτηση και επιστρεφει ως τιμή το αποτελεσμα της παραστασης.

Καταρχας ευχαριστω ΠΑΡΑ πολυ για την αμεση ανταποκριση!

Επειτα, εστω οτι ο κωδικας αυτος ειναι μεσα στη main, πως ακριβως με πηγαινει το return -1πισω στη scanf("%d",&x) ;;;

 

ΠΡΟΓΡΑΜΜΑ:

int main() {

  int x;

  printf("Please give a positive integer\n");

  scanf("%d", &x);

  if(x<0) {

    printf("Type again\n");

    return -1;

  }

return 0;

}

 

- -Ελπιζω η ερωτηση μου να μην ειναι μπερδεμενη/ λαθος διατυπωμενη!!! - -

  • Moderators
Δημοσ.

Δε θα σε πάει πίσω στη scanf. Για να το κάνει αυτό, πρέπει να το βάλεις σε μια επανάληψη που θα ελέγχει την τιμή του κάθε αριθμού που βάζει ο χρήστης.

 

 

int main(void)
{
    int x;
    printf("Please give a positive integer\n");
 
    do
    {
        printf("Type again\n");
        scanf("%d", &x);
    } while (x < 0);
}

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

  • Like 1
Δημοσ.

Γνωριζω αυτες τις μεθοδους επαναληψης, και ειναι και για εμενα πιο προσιτες. Ωστοσο, επειδη συναντω συχνα το παραπανω φαινομενο με το return - - και οχι μονο με την τιμη -1, αλλα και με αλλες τιμες- - θα ηθελα να κατανοησω πως λειτουργει.

Με συγχωρειτε αν γινομαι κουραστικη :unsure: :confused:

Δημοσ.

Λοιπόν, τα προγράμματα καλούνται από τον χρήστη μέσω του λειτουργικού συστήματος. Θα λέμε ότι καλούνται από το λειτουργικό. Το λειτουργικό σύστημα είναι λοιπόν το σημείο κλήσης του προγράμματος. Ένα πρόγραμμα γραμμένο σε C, όταν εκτελείται από το λειτουργικό σύστημα, ψάχνει να βρει τη συνάρτηση main. Μόλις την εντοπίσει ξεκινά η εκτέλεση των εντολών που βρίσκονται μέσα σε αυτή. Μόλις το πρόγραμμα τελειώσει με την εκτέλεσή του, υποχρεούνται να "επιστρέψει" στο λειτουργικό και επίσης να επιστρέψει και κάποια τιμή. Αυτή η τιμή θα δηλώνει αν το πρόγραμμα εκτελέστηκε με επιτυχία ή με αποτυχία. Για να το κάνουμε αυτό στη C χρησιμοποιούμε την εντολή return ακολουθούμενη από έναν προσιμασμένο ακέραιο. Γενικά υπάρχει η σύμβαση ότι αν στη θέση του ακεραίου βάλουμε τον αριθμό 0, τότε το πρόγραμμά μας εκτελέστηκε με επιτυχία. Με οποιοδήποτε άλλο αριθμό (διάφορο του 0) δηλώνουμε αποτυχία. Αυτό γιατί να το κάνουμε; Το λειτουργικό σύστημα δε μπορεί να καταλάβει αν το πρόγραμμα εκτελέστηκε επιτυχώς ή το αντίθετο διαβάζοντας τα μηνύματα που εκτυπώνεις. Δε μπορεί να τα διαβάσει. Αυτό που μπορεί να κάνει όμως είναι να συγκρίνει αριθμούς. Όπως βλέπεις και στην εικόνα που σου έφτιαξα (όπου φαίνονται δύο εκτελέσεις), το λειτουργικό στο τέλος εμφανίζει με ποιο τρόπο τερματίστηκε το πρόγραμμα.

 

post-223995-0-17726200-1408814123_thumb.jpg

 

  • Like 2
Δημοσ.

Γνωριζω αυτες τις μεθοδους επαναληψης, και ειναι και για εμενα πιο προσιτες. Ωστοσο, επειδη συναντω συχνα το παραπανω φαινομενο με το return - - και οχι μονο με την τιμη -1, αλλα και με αλλες τιμες- - θα ηθελα να κατανοησω πως λειτουργει.

Με συγχωρειτε αν γινομαι κουραστικη :unsure: :confused:

Η εντολή return συνήθως χρησιμοποιείται για να επιστρέψει την τιμή μιας συνάρτησης και να την τερματίσει. Στην συνάρτηση main (όπως στο παράδειγμα που έδωσες παραπάνω) χρησιμοποιείται ώστε να ενημερώσει το λειτουργικό σύστημα "πως πήγαν τα πράγματα", επιστρέφοντας την τιμή 0 όπως παραπάνω ουσιαστικά του λέει ότι όλα πήγαν καλά. 

 

Στο παραπάνω παράδειγμα που έδωσες, είναι ανούσιο να χρησιμοποιήσει κάποιος return, δεν χρησιμεύει σε κάτι.

  • Like 1
Δημοσ.

Στο παραπάνω παράδειγμα που έδωσες, είναι ανούσιο να χρησιμοποιήσει κάποιος return, δεν χρησιμεύει σε κάτι.

 

ΠΡΟΣΟΧΗ: Αν ο OP γράφει σε C τότε πρέπει!!!! Αν γράφει σε C++ θα μπορούσε να παραλείψει το τελευταίο return.

Δημοσ.

ΠΡΟΣΟΧΗ: Αν ο OP γράφει σε C τότε πρέπει!!!! Αν γράφει σε C++ θα μπορούσε να παραλείψει το τελευταίο return.

Δεν αναφερόμουν στο τελευταίο return, αναφερόμουν σε αυτό εδώ:

 

  if(x<0) {

    printf("Type again\n");

    return -1;

  }

  • Moderators
Δημοσ.

Το return χρησιμοποιείται από τις συναρτήσεις για να επιστρέψει το πρόγραμμα εκεί που ήταν πριν την κλήση της συνάρτησης. Τα προγράμματα στον υπολογιστή εκτελούνται σειριακά:

 

Εντολή 1
Εντολή 2
.
.
.
Εντολή n

 

Άμα εσύ καλέσεις μια συνάρτηση, το πρόγραμμα "πηδάει" σε μια άλλη εντολή, και συνεχίζει την εκτέλεση από εκεί.

 

 

Εντολή 1
Κάλεσε συνάρτηση_1
Εντολή 2
.
.
.
Εντολή n
.
.
.
Εντολή 1 συνάρτηση_1
Εντολή 2 συνάρτηση_1
.
.
.
Εντολή m συνάρτηση_1

 

Όταν καλέσεις τη συνάρτηση_1, το πρόγραμμα θα πάει στην Εντολή 1 συνάρτηση_1 και θα συνεχίσει σειριακά από εκεί. Ο υπολογιστής δε μπορεί να ξέρει πού τελειώνει η συνάρτησή σου, γι' αυτό χρησιμοποιείς τη return. Όταν τελειώσει, είναι σα να λέει "πήγαινε στην επόμενη εντολή που είναι μετά από την εντολή που με κάλεσε". Στο παραδειγμα είναι η Εντολή 2, δηλαδή η εντολή ακριβώς μετά την κλήση στη συνάρτηση_1.

 

Ορισμένες συναρτήσεις επιστρέφουν διάφορες τιμές τις οποίες χρησιμοποιεί το πρόγραμμα όπως διαλέγει ο προγραμματιστής. Μπορείς πχ να έχεις μια συνάρτηση που να παίρνει 2 αριθμούς και να επιστρέφει το άθροισμά τους.

  • Like 1
Δημοσ.

Δεν αναφερόμουν στο τελευταίο return, αναφερόμουν σε αυτό εδώ:

H λογική και άρα ο σχεδιασμός του προγράμματος επιβάλλει να ενημερώσει τον caller για την κατάσταση επιτυχίας. Άρα πρέπει να υπάρχει. Σκέψου να υπήρχε αυτό το snippet σε μία συνάρτηση η οποία καλείται επαναληπτικά.

  • Like 2
Δημοσ.

Το return χρησιμοποιείται από τις συναρτήσεις για να επιστρέψει το πρόγραμμα εκεί που ήταν πριν την κλήση της συνάρτησης. Τα προγράμματα στον υπολογιστή εκτελούνται σειριακά:.............

 

Σας ευχαριστω πολυ νομιζω επιασα το γενικο νοημα! :-D

Δημοσ.

H λογική και άρα ο σχεδιασμός του προγράμματος επιβάλλει να ενημερώσει τον caller για την κατάσταση επιτυχίας. Άρα πρέπει να υπάρχει. Σκέψου να υπήρχε αυτό το snippet σε μία συνάρτηση η οποία καλείται επαναληπτικά.

Για το παραπάνω παράδειγμα μιλούσα συγκεκριμένα, δεν υπάρχει συνάρτηση που καλείται επανειλημμένα εδώ.

Δημοσ.

Για το παραπάνω παράδειγμα μιλούσα συγκεκριμένα, δεν υπάρχει συνάρτηση που καλείται επανειλημμένα εδώ.

Ο χρήστης που καλεί το πρόγραμμα από το λειτουργικό θέλει να γνωρίζει για επιτυχία ή αποτυχία. Έστω ότι θέλει να το χρησιμοποιήσει σε κάποιο shell/batch script. Τότε πρέπει να ελέγχει μία επιστρφόμενη τιμή. Αν η επιστρεφόμενη τιμή ακόμη και για αρνητικούς είναι 0, τότε υπάρχει λογικό σφάλμα στο πρόγραμμα.

  • Like 1

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα
  • Δημιουργία νέου...