Διευκρινιστικές ερωτήσεις για cout.precision() και για string

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Connor MacLeod
Honorary Member
Δημοσιεύσεις: 13372
Εγγραφή: 07 Φεβ 2005 13:36
Τοποθεσία: Κοζάνη
Επικοινωνία:

Διευκρινιστικές ερωτήσεις για cout.precision() και για string

Δημοσίευση από Connor MacLeod » 29 Ιουν 2012 22:41

Καλησπέρα.

Λοιπον εχω 2 απορίες.
Η πρώτη εχει να κανει με το cout.precision.

Αν εχω εναν float και εναν double και εχω στον κώδικα μου:

Κώδικας: Επιλογή όλων

      float x = 3.454545;
      double y = 3.4343434343434;
      
      cout.precision(7);
      cout << x << endl;
      
      cout << y << endl;
Θα με εμφανίσει και για τους δύο τα 6 πρωτα στοιχεία μετα το . (στον χ όλα γιατι τοσα ειναι)
Τωρα, άν εγω βάλω :
cout.precision(7);
cout << x << endl;
cout.precision(14);
cout << y << endl;
Σαφως θα με τα εμφανισει και τα δύο οπως πρέπει.

θελω να ρωτήσω τα εξεις:

:arrow: Αν βάλω:

Κώδικας: Επιλογή όλων

float x = 3.454545;
      double y = 3.4343434343434;
      
      cout.precision&#40;14&#41;;
      cout << x << endl;

      cout << y << endl;
Στο πρώτο cout, τα υπόλοιπα που τα βρίσκει και τα εμφανίζει? Τυχαία νουμερα δεν ειναι, γιατι σε καθε compile εμφανίζει παντα τα ίδια.

:arrow: Αν εχω να εμφανίσω πολλά τετοια, πρέπει να βάζω μεσα στο .precision() πάντα τον αριθμό που θέλω? Πχ μπορει να εχω μια πράξη και να μην ξέρω πόσα θα εχει μετα το κόμμα. Τοτε τι κανω?

:arrow: Μπορω αν εχω πολλα cout με ενα .presicion να με εμφανιζει ολες τις μεταβλητες στα ξεχωριστά cout τα δεκαδικά που εχει η καθε μεταβλητη? πχ αν εχω :

Κώδικας: Επιλογή όλων

      cout << x << endl;
      cout << y << endl;
      cout << z << endl;
      cout << res << endl;
      cout << sum << endl; 
Να βαλω μονο ενα .presision() και να με εμφανίζει ολα τα σωστα δεκαδικα σε ολα τα cout

Και η δεύτερη ερώτηση με το string:

Κώδικας: Επιλογή όλων

      string s1 = "hello world";
      string s2 = &#40;"hello Asia"&#41;;
      cout << s1 << endl;
      cout << s2 << endl;
Εχει καμια ουσιαστική διαφορά?
Στην output ειναι το ίδιο για τον χρήστη, αλλα μήπως εχει καμια διαφορα μεσα για το ιδιο το πρόγραμμα? Πχ μηπως στο ενα απο τα δυο χρησιμοποιεί περισσότερη μνήμη ή κατι αλλο...
Meizu MX5(5.5"/8Core/3GB/32GB/Sony IMX220 20.7MP)
PC 27'' (3770@3.4/16GB/560SE/500GB SATA3/650W S12G)
Mac mini (2.5GHz/8GB/6630/90GB GorsairGT)

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Διευκρινιστικές ερωτήσεις για cout.precision() και για string

Δημοσίευση από mariosal » 01 Ιούλ 2012 14:43

Το float και το double μπορούν να εγγυηθούν ακρίβεια 6 και 15 ψηφίων συνήθως. Μπορείς να δεις τι εγγυάται ο compiler σου μέσω των FLT_DIG και DBL_DIG της cfloat. Εάν προσπαθήσεις να τυπώσεις παραπάνω ψηφία, δεν μπορείς να είσαι βέβαιος ότι είναι σωστά.

Η χρήση των συναρτήσεων της cstdio προτιμάται από των streams, διότι μπορείς αμέσως να καταλάβεις το format του input / output. Επίσης η ακρίβεια στην printf() ορίζεται πολύ πιο απλά, όπως μπορείς να δεις στον κώδικα παρακάτω, και κάνει round. Το default precision της printf() είναι 6 δεκαδικά αν δεν κάνω λάθος.

Κώδικας: Επιλογή όλων

#include <cstdio>
#include <cfloat>

int main&#40;&#41; &#123;
    float a = 0.123456;
    double b = 0.123456789012345;

    printf&#40; "float&#58; %d\n", FLT_DIG &#41;;
    printf&#40; "double&#58; %d\n", DBL_DIG &#41;;

    printf&#40; "%.6f\n", a &#41;;
    printf&#40; "%.15lf\n", b &#41;;

    return 0;
&#125;
Όσον αφορά τα strings οι παρενθέσεις δεν παίζουν ρόλο όπως μπορείς να δεις εδώ: http://www.cplusplus.com/reference/stri ... operator=/

Άβαταρ μέλους
Connor MacLeod
Honorary Member
Δημοσιεύσεις: 13372
Εγγραφή: 07 Φεβ 2005 13:36
Τοποθεσία: Κοζάνη
Επικοινωνία:

Διευκρινιστικές ερωτήσεις για cout.precision() και για string

Δημοσίευση από Connor MacLeod » 01 Ιούλ 2012 21:44

Δε με βοηθας και πολυ
:D

Ενδιαφέρομαι συγκεκριμένα για το cout.precision() Και θα ήθελα απαντησεις για τα παραπάνω που ρώτησα


:P
Για το δευτερο κατανοητο :P
Σε ευχαριστω παντως για τον κοπο σου
Meizu MX5(5.5"/8Core/3GB/32GB/Sony IMX220 20.7MP)
PC 27'' (3770@3.4/16GB/560SE/500GB SATA3/650W S12G)
Mac mini (2.5GHz/8GB/6630/90GB GorsairGT)

mariosal
Honorary Member
Δημοσιεύσεις: 1473
Εγγραφή: 09 Νοέμ 2007 23:55

Διευκρινιστικές ερωτήσεις για cout.precision() και για string

Δημοσίευση από mariosal » 02 Ιούλ 2012 13:34

Είτε steams ή cstdio χρησιμοποιήσεις, η συμπεριφορά των float είναι η ίδια. Αν τυπώσεις δεκαδικά παραπάνω από 6 ενώ έχεις float, τότε δεν μπορείς να είσαι βέβαιος ότι είναι σωστός ο αριθμός.

Έπειτα η C++ δεν κάνει μαγικά, αν θες να τυπώσεις float, πρέπει να του βάλεις το precision διαφορετικά θα έχεις μόνο 6 ψηφία.

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης