Σελ. 1 από 2 12 ΤελευταίαΤελευταία
Εμφάνιση 1-15 από 22
  1. #1
    Εγγραφή
    21-03-2009
    Περιοχή
    Ξάνθη
    Μηνύματα
    636
    Downloads
    28
    Uploads
    0
    Ταχύτητα
    5/~37.5
    ISP
    Forthnet
    DSLAM
    Forthnet - ΞΑΝΘΗ
    SNR / Attn
    8(dB) / 15.5(dB)
    Path Level
    Interleaved
    Ξεκινήσαμε στην σχολή την γλώσσα C και έχω κάποιες ασκήσεις για παράδοση.Ομολογώ ότι στην μία τα βρήκα σκούρα.
    Η εκφώνηση είναι η εξής:''Να γράψετε ένα πρόγραμμα το οποίο να διαβάζει:

    Α. μια σειρά χαρακτήρων (string),
    Β. έναν ακέραιο και
    Γ. ένα δεκαδικό (πραγματικό)

    και με τη βοήθεια της συνάρτησης printf( ) να εμφανίζει στην οθόνη τουλάχιστον 3 χαρακτήρες ή ψηφία αλλά όχι περισσότερα από 7, για κάθε εισαγόμενη τιμή. Να κάνετε πολλές δοκιμές εισάγοντας τιμές από 1 μέχρι 10 χαρακτήρες ή ψηφία.''

    Η δική μου υλοποίηση είναι η εξής:

    #include <stdio.h>
    main ()
    {
    int x;
    char a[80];
    float b;
    printf("δώσε τιμές: \n");
    scanf("%7d %7s %7f",&x,&a,&b);
    printf("\n δώσατε τις τιμές: %03d %3s %3f\n" , x,a,b);
    }
    Η τελευταία γραμμή είναι σίγουρα λάθος.
    Το παραπάνω πρόγραμμα θα πρέπει να εμφανίζει από τρεις έως επτά χαρακτήρες,αριθμούς και τα λοιπά.Οπότε με την scanf το αναγκάζω να διαβάσει μέχρι επτά.Στην περίπτωση που διαβάσει λιγότερα από 3(πχ έναν διψήφιο ακέραιο όπως ο 25),πρέπει η printf να έρθει και να το κάνει 025(δηλαδή να βάλει το μηδέν μπροστά).Το ίδιο πρέπει να συμβαίνει και με τους χαρακτήρες και με τον float.
    Αν μπορεί κάποιος να βοηθήσει θα μουν ευγνώμων.

  2. #2
    Εγγραφή
    20-11-2006
    Ηλικία
    56
    Μηνύματα
    797
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    14566/1006
    ISP
    HOL
    DSLAM
    HOL - ΑΘΗΝΑ
    Router
    Pirelli (λευκό)
    SNR / Attn
    9(dB) / 15(dB)
    Path Level
    Interleaved
    Με τον float έχω κι εγώ ένα θέμα, όταν μας δώσει στην είσοδο μεγαλύτερη τιμή από 7 ψηφία (int.frac). Αλλιώς...

    Κώδικας:
        scanf( "%f", &f );
        printf( "%07.2f\n", f );
    Για int το έχεις σωστά.

    Για το string, αν "πιάνονται" ως χαρακτήρες τα padding κενά που βάζει η printf, τότε το έχεις επίσης σωστά, αλλιώς (με το '0' ως padding char)...

    Κώδικας:
        scanf( "%7s", s );
        if ( strlen(s) < 3 ) {
            for (int i=0; i < 2; i++)
                putchar('0');
            puts(s);
        }
        else
            printf( "%7s\n", s );

  3. #3
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.228
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Μια και το λύνετε και οι δύο με τον ίδιο τρόπο, υποθέτω ότι δεν κατάλαβα καλά την εκφώνηση, αλλά

    Παράθεση Αρχικό μήνυμα από christakoss Εμφάνιση μηνυμάτων
    'Να γράψετε ένα πρόγραμμα το οποίο να διαβάζει:
    .....
    και με τη βοήθεια της συνάρτησης printf( ) να εμφανίζει στην οθόνη τουλάχιστον 3 χαρακτήρες ή ψηφία αλλά όχι περισσότερα από 7, για κάθε εισαγόμενη τιμή. Να κάνετε πολλές δοκιμές εισάγοντας τιμές από 1 μέχρι 10 χαρακτήρες ή ψηφία.''
    εγώ το παραπάνω το καταλαβαίνω ως ο χρήστης θα δίνει ό,τι θέλει και θα διαβάζεται κανονικά ολόκληρη η είσοδος. Μετά το printf θα εμφανίζει από 3 μέχρι 7 ψηφία ανάλογα με το μήκος. Αν δώσει ο χρήστης Tria, η scanf θα πρέπει να διαβάσει κανονικά όλο το Tria και η printf να εμφανίσει TriTria. Αν δώσει TriaPoylakiaKa8ontai, η scanf θα διαβάσει και πάλι όλο το string και η printf θα εμφανίσει TriaPoy. Αυτό που λέω δηλαδή είναι ότι στην scanf δεν πρέπει να δηλώνεται το 7.

    Μπορεί φυσικά να ερμήνευσα την εκφώνηση λανθασμένα.
    Τελευταία επεξεργασία από το μέλος imitheos : 05-04-12 στις 15:45.
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  4. #4
    Εγγραφή
    20-11-2006
    Ηλικία
    56
    Μηνύματα
    797
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    14566/1006
    ISP
    HOL
    DSLAM
    HOL - ΑΘΗΝΑ
    Router
    Pirelli (λευκό)
    SNR / Attn
    9(dB) / 15(dB)
    Path Level
    Interleaved
    Δεν γνωρίζουμε και την ύλη που έχουν καλύψει (σιχαμένη scanf )

  5. #5
    Εγγραφή
    21-03-2009
    Περιοχή
    Ξάνθη
    Μηνύματα
    636
    Downloads
    28
    Uploads
    0
    Ταχύτητα
    5/~37.5
    ISP
    Forthnet
    DSLAM
    Forthnet - ΞΑΝΘΗ
    SNR / Attn
    8(dB) / 15.5(dB)
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από imitheos Εμφάνιση μηνυμάτων
    Μια και το λύνετε και οι δύο με τον ίδιο τρόπο, υποθέτω ότι δεν κατάλαβα καλά την εκφώνηση, αλλά



    εγώ το παραπάνω το καταλαβαίνω ως ο χρήστης θα δίνει ό,τι θέλει και θα διαβάζεται κανονικά ολόκληρη η είσοδος. Μετά το printf θα εμφανίζει από 3 μέχρι 7 ψηφία ανάλογα με το μήκος. Αν δώσει ο χρήστης Tria, η scanf θα πρέπει να διαβάσει κανονικά όλο το Tria και η printf να εμφανίσει Tri. Αν δώσει TriaPoylakiaKa8ontai, η scanf θα διαβάσει και πάλι όλο το string και η printf θα εμφανίσει TriaPoy. Αυτό που λέω δηλαδή είναι ότι στην scanf δεν πρέπει να δηλώνεται το 7.

    Μπορεί φυσικά να ερμήνευσα την εκφώνηση λανθασμένα.
    Τελικά η δική σου ερμηνεία είναι η σωστή.(έπεσα καταλάθος στις λύσεις του μεταπτυχιακού που κάνει μάθημα στο άλλο τμήμα και το υλοποιεί σύμφωνα με το σκεπτικό σου.Ο δικός μας είναι τρα λα λα τρα λα λω..''βρείτε το στο google μας είπε'')
    Πως το υλοποιούμε τότε;;Πως γίνεται η printf να θέτει ταυτόχρονα δύο περιορισμούς(όχι μικρότερο από το 3 και όχι μεγαλύτερο από το 7);;

  6. #6
    Εγγραφή
    21-03-2009
    Περιοχή
    Ξάνθη
    Μηνύματα
    636
    Downloads
    28
    Uploads
    0
    Ταχύτητα
    5/~37.5
    ISP
    Forthnet
    DSLAM
    Forthnet - ΞΑΝΘΗ
    SNR / Attn
    8(dB) / 15.5(dB)
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Δεν γνωρίζουμε και την ύλη που έχουν καλύψει (σιχαμένη scanf )
    Όσο για την ύλη που καλύψαμε στην scanf.Μια μικρή αναφορά έγινε για το τι κάνει.Τίποτα παραπάνω.
    Σε ευχαριστώ για την βοήθεια σου παραπάνω.

  7. #7
    Εγγραφή
    20-11-2006
    Ηλικία
    56
    Μηνύματα
    797
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    14566/1006
    ISP
    HOL
    DSLAM
    HOL - ΑΘΗΝΑ
    Router
    Pirelli (λευκό)
    SNR / Attn
    9(dB) / 15(dB)
    Path Level
    Interleaved
    Γι' αυτό εγώ διαβάζω τα πάντα ως strings, και μετά τα μετατρέπω σε ότι χρειάζομαι.

  8. #8
    Εγγραφή
    20-11-2006
    Ηλικία
    56
    Μηνύματα
    797
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    14566/1006
    ISP
    HOL
    DSLAM
    HOL - ΑΘΗΝΑ
    Router
    Pirelli (λευκό)
    SNR / Attn
    9(dB) / 15(dB)
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από imitheos Εμφάνιση μηνυμάτων
    ...
    Αν δώσει ο χρήστης Tria, η scanf θα πρέπει να διαβάσει κανονικά όλο το Tria και η printf να εμφανίσει Tri.
    ...
    Εδώ γιατί να εμφανίσει Tri και όχι Tria;

  9. #9
    Εγγραφή
    21-03-2009
    Περιοχή
    Ξάνθη
    Μηνύματα
    636
    Downloads
    28
    Uploads
    0
    Ταχύτητα
    5/~37.5
    ISP
    Forthnet
    DSLAM
    Forthnet - ΞΑΝΘΗ
    SNR / Attn
    8(dB) / 15.5(dB)
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Γι' αυτό εγώ διαβάζω τα πάντα ως strings, και μετά τα μετατρέπω σε ότι χρειάζομαι.
    Όσο για τις μετατροπές δεν θυμάμαι αν τα είχαμε πει στην θεωρία.Δύο μαθήματα έχουμε κάνει όλα και όλα και αυτά μισά και στραβά.
    Στο εργαστήριο μας είπαν να μην χρησιμοποιήσουμε συνθήκες.
    Αν θέλω τώρα να υλοποιήσω αυτό που είπε ο hmitheos.Πως μπορώ να το κάνω;;
    #include <stdio.h>
    main ()
    {
    int x;
    char a[80];
    float b;
    printf("δώσε τιμές: \n");
    scanf("%d %s %f",&x,&a,&b);
    Η printf πως πρέπει να δομηθεί;;

    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Εδώ γιατί να εμφανίσει Tri και όχι Tria;
    Σωστό.Μου διέφυγε παραπάνω.Το Tria το εμφανίζει κανονικά.
    Αν δίναμε Tr θα έπρεπε να συμπλήρωνε με ένα κενό μπροστά δηλαδή (_Tr)

  10. #10
    Εγγραφή
    20-11-2006
    Ηλικία
    56
    Μηνύματα
    797
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    14566/1006
    ISP
    HOL
    DSLAM
    HOL - ΑΘΗΝΑ
    Router
    Pirelli (λευκό)
    SNR / Attn
    9(dB) / 15(dB)
    Path Level
    Interleaved
    Δεν έχω καταλάβει τι ακριβώς εννοεί ο imitheos (γιατί Tri κι όχι Tria ; )

  11. #11
    Εγγραφή
    21-03-2009
    Περιοχή
    Ξάνθη
    Μηνύματα
    636
    Downloads
    28
    Uploads
    0
    Ταχύτητα
    5/~37.5
    ISP
    Forthnet
    DSLAM
    Forthnet - ΞΑΝΘΗ
    SNR / Attn
    8(dB) / 15.5(dB)
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Δεν έχω καταλάβει τι ακριβώς εννοεί ο imitheos (γιατί Tri κι όχι Tria ; )
    Μάλλον θα του ξέφυγε.
    Πάντως η λογική του ημίθεου έχει ένα point.Η scanf διαβάσει ότι δώσουμε και η printf εμφανίζει από 3 έως 7 χαρακτήρες.Αυτό μπορεί να υλοποιηθεί σε εντολές printf;;

  12. #12
    Εγγραφή
    20-11-2006
    Ηλικία
    56
    Μηνύματα
    797
    Downloads
    0
    Uploads
    0
    Ταχύτητα
    14566/1006
    ISP
    HOL
    DSLAM
    HOL - ΑΘΗΝΑ
    Router
    Pirelli (λευκό)
    SNR / Attn
    9(dB) / 15(dB)
    Path Level
    Interleaved
    Βασικά, η scanf() είναι (arguably) η πιο προβληματική, ή μάλλον η πιο error-prone, συνάρτηση της γλώσσας και in real life δεν την χρησιμοποιεί κανείς. Οπότε είναι ολίγον (έως πολύ) pointless η όλη άσκηση εν γένη!

    Οκ, καλό είναι να μάθετε formated input (κυρίως για ανάγνωση well-defined, formated data από αρχεία, με fscanf() αλλά μέχρι εκεί.)

    Θα μου πεις, και με το δίκιο σου, πως εσένα ποσώς σε ενδιαφέρει, αφού το ζητάει η άσκηση. Απλώς εξηγώ γιατί δεν προτίθεμαι εγώ να κάτσω να πονοκεφαλιάσω για την scanf

    Καλή συνέχεια.

  13. #13
    Εγγραφή
    21-03-2009
    Περιοχή
    Ξάνθη
    Μηνύματα
    636
    Downloads
    28
    Uploads
    0
    Ταχύτητα
    5/~37.5
    ISP
    Forthnet
    DSLAM
    Forthnet - ΞΑΝΘΗ
    SNR / Attn
    8(dB) / 15.5(dB)
    Path Level
    Interleaved
    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Βασικά, η scanf() είναι (arguably) η πιο προβληματική, ή μάλλον η πιο error-prone, συνάρτηση της γλώσσας και in real life δεν την χρησιμοποιεί κανείς. Οπότε είναι ολίγον (έως πολύ) pointless η όλη άσκηση εν γένη!

    Οκ, καλό είναι να μάθετε formated input (κυρίως για ανάγνωση well-defined, formated data από αρχεία, με fscanf() αλλά μέχρι εκεί.)

    Θα μου πεις, και με το δίκιο σου, πως εσένα ποσώς σε ενδιαφέρει, αφού το ζητάει η άσκηση. Απλώς εξηγώ γιατί δεν προτίθεμαι εγώ να κάτσω να πονοκεφαλιάσω για την scanf

    Καλή συνέχεια.
    Οκ ευχαριστώ πάντως για την βοήθεια.Προβληματική ξε-προβληματική αυτή μας διδάσκουν.Τι να πει κανείς.

  14. #14
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.228
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Δεν έχω καταλάβει τι ακριβώς εννοεί ο imitheos (γιατί Tri κι όχι Tria ; )
    Γιατί ο imitheos είναι μάπας και άλλο σκεφτόταν και άλλο έγραψε
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

  15. #15
    Εγγραφή
    20-12-2005
    Μηνύματα
    3.228
    Downloads
    4
    Uploads
    0
    Τύπος
    VDSL2
    Ταχύτητα
    49997/4997
    ISP
    ΟΤΕ Conn-x
    DSLAM
    ΟΤΕ - ΞΑΝΘΗ
    Router
    Speedport W 724V
    SNR / Attn
    24,4(dB) / (dB)
    Παράθεση Αρχικό μήνυμα από christakoss Εμφάνιση μηνυμάτων
    Μάλλον θα του ξέφυγε.
    η printf εμφανίζει από 3 έως 7 χαρακτήρες.Αυτό μπορεί να υλοποιηθεί σε εντολές printf;;
    Παράθεση Αρχικό μήνυμα από migf1 Εμφάνιση μηνυμάτων
    Θα μου πεις, και με το δίκιο σου, πως εσένα ποσώς σε ενδιαφέρει, αφού το ζητάει η άσκηση. Απλώς εξηγώ γιατί δεν προτίθεμαι εγώ να κάτσω να πονοκεφαλιάσω για την scanf
    Παράθεση Αρχικό μήνυμα από christakoss Εμφάνιση μηνυμάτων
    Οκ ευχαριστώ πάντως για την βοήθεια.Προβληματική ξε-προβληματική αυτή μας διδάσκουν.Τι να πει κανείς.
    Η κλασική χαζοάσκηση σχολής

    Ίσως την έχει βάλει για να δει ο μαθητής τις διάφορες επιλογές της printf

    Spoiler:

    Παράθεση Αρχικό μήνυμα από κομμένη manpage
    Each conversion specification is introduced by the character %, and ends with a conversion specifier. In between there may be (in this order) zero or
    more flags, an optional minimum field width, an optional precision and an optional length modifier.

    The field width
    An optional decimal digit string (with nonzero first digit) specifying a minimum field width. If the converted value has fewer characters
    than the field width, it will be padded with spaces on the left.

    The precision
    An optional precision, in the form of a period ('.') followed by an optional decimal digit string. This gives the maximum number of
    characters to be printed from a string for s and S conversions.

    Οπότε συνδυάζεις το width για το ελάχιστο 3 και την precision για το μέγιστο 7.

    Αν δουλεύεις linux, *bsd, κτλ, μπορείς να τρέχεις σε ένα τερματικό "man εντολή" (πχ man printf) και να βλέπεις την σύνταξη της και ένα κάρο χρήσιμες πληροφορίες. Σε Windows δεν γνωρίζω αλλά σίγουρα θα υπάρχει κάτι αντίστοιχο. Θα σου πει o migf1 τι παίζει.
    "I like offending people, because I think people who get offended should be offended" - Linus Torvalds

    "Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
    κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
    Γα.... την πολιτική ορθότητα.

Σελ. 1 από 2 12 ΤελευταίαΤελευταία

Παρόμοια Θέματα

  1. Βοήθεια στην VB
    Από Anna_gr στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 1
    Τελευταίο Μήνυμα: 06-06-11, 01:40
  2. Βοηθεια στην C
    Από kotsos133 στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 13
    Τελευταίο Μήνυμα: 20-03-11, 14:23
  3. Βοήθεια στην C
    Από chas στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 3
    Τελευταίο Μήνυμα: 21-10-10, 00:23
  4. βοηθεια στην c++
    Από katerinaa στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 1
    Τελευταίο Μήνυμα: 15-05-08, 11:54
  5. ΒΟΗΘΕΙΑ στην C
    Από angelspy στο φόρουμ Προγραμματισμός και γλώσσες προγραμματισμού
    Μηνύματα: 15
    Τελευταίο Μήνυμα: 23-11-06, 03:21

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας