Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 28 Φεβ 2012, 19:19

Δεν καταλαβαίνω την απορία. Μήπως μπερδεύεις τους formatting specifiers με τις μεταβλητές και τους αριθμούς γενικώς;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 28 Φεβ 2012, 19:25

Παρεμπιπτόντως, δεν ξέρω αν το λέει στο βιβλίο (μάλλον θα το λέει, αλλά δεν μπορώ τώρα να κοιτάξω) αλλά υπάρχει και το πολύ χρήσιμο * (αστερίσκος) που μπαίνει αντί για πλάτος, μετά το % και μπορείς να χρησιμοποιήσεις μεταβλητή εκεί πέρα.

Δηλαδή, αν π.χ. αντί για...

Μορφοποιημένος Κώδικας: Επιλογή όλων
int n = 12;
printf("%4d\n", n);

Μπορούμε να γράψουμε...

Μορφοποιημένος Κώδικας: Επιλογή όλων
int n = 12, width = 4;

printf("%*d\n", width, n );

Χρήσιμο όταν δεν θέλουμε να τυπώνουμε πάντα στο ίδιο πλάτος τον n.
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 28 Φεβ 2012, 19:40

Nα ας πουμε και στην σελιδα 44 λεει οτι The first nonblank input character is 1 :S
μηπως ισχυει αυτο που ειπες πριν? Οτι δηλαδη αριθμοι απο ευρος 0...255 ειναι και αριθμοι
αλλα και χαρακτηρες ταυτοχρονα?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 28 Φεβ 2012, 19:48

Δεν καταλαβαίνω τι ρωτάς Κώστα. Το τι συμβαίνει μέσα στο formatting string της printf() δεν έχει σχέση με το αν οι αριθμοί αντιστοιχούν εσωτερικά σε χαρακτήρες ή όχι.

ΥΓ. Βάζε παράθεση τα κείμενα από το βιβλίο που δεν καταλαβαίνεις, ή εκτός από σελίδα γράφε και περίπου σε ποια γραμμή της σελίδας είναι αυτό στο οποίο αναφέρεσαι... γίνε πιο συγκεκριμένος (δεν μπορώ να διαβάζω ολόκληρες τις σελίδες για να βρω σε ποια γραμμή αναφέρεσαι).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 28 Φεβ 2012, 19:55

Ok . Kαταρχην αξιζει να διαβασω την σελιδα 44 ή θα με μπλέξει γιατι λεει και για digits απο οτι βλεπω εδω. Απλα εχω την εντύπωση
οτι στο Q&A στην ιδια σελιδα 44 στο 1ο bulletin λεει για characters...

Ολοκληρη η σελιδα 43 λεει πως δουλευει πχ η scanf ... αν εγω δωσω να διαβάσει αυτο -> <κενό> 1 <κενό> τοτε το '\n' αυτης της γραμμής καθως πατήσω ΕΝΤΕΡ παει σαν εισοδος σε επομενη scanf τι μας πειραζει ομως αφου λεει οτι τα αγνοει ολα αυτα....
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 28 Φεβ 2012, 20:00

Star_Light έγραψε:Nα ας πουμε και στην σελιδα 44 λεει οτι The first nonblank input character is 1 :S
μηπως ισχυει αυτο που ειπες πριν? Οτι δηλαδη αριθμοι απο ευρος 0...255 ειναι και αριθμοι
αλλα και χαρακτηρες ταυτοχρονα?

Αναφέρετε στο παράδειγμα που έχει δώσει πιο πάνω στην σελίδα 43.
Στην περίπτωση δηλαδή που η είσοδος είναι " 1-20 .3 -4.0e3". Επειδή ο πρώτος χαρακτήρας είναι κενό γι' αυτό λέει ότι ο πρώτος nonblank character είναι 1.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 28 Φεβ 2012, 20:02

ααα οκ. Γιατι ειναι λιγο μπερδεμα... τουλαχιστον εμενα ετσι μου φανηκε.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό migf1 » 28 Φεβ 2012, 20:02

Εννοείται πως πρέπει να διαβάσεις πως δουλεύει η scanf()... γιατί έτσι δουλεύουν και η fscanf() και η sscanf(). Το ότι η scanf() δημιουργεί προβλήματα είναι σίγουρο, αλλά πρέπει να ξέρεις πως λειτουργεί (και μετά θα είσαι σε θέση να αποφασίζεις πότε και γιατί πρέπει να την αποφεύγεις).

ΥΓ. Σε αυτά που γράφεις στη 2η παράγραφό σου δεν καταλαβαίνω τι λες (τι <κενό> και -> είναι αυτά που γράφεις; )
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Ilias95 » 28 Φεβ 2012, 20:02

Star_Light έγραψε:αφου λεει οτι τα αγνοει ολα αυτα....

Δεν τα αγνοεί όλα. Η scanf αγνοεί τα κενά μόνο όταν περιμένει αριθμό (int, float κλπ).
Αν περιμένει άλλο χαρακτήρα δεν θα αγνοήσει τα κενά, αλλά θα κάνει την σύγκριση.

Edit: Εκτός αν δεν κατάλαβα καλά τι εννοείς.
Ilias95
saintTUX
saintTUX
 
Δημοσιεύσεις: 1548
Εγγραφή: 29 Απρ 2011, 23:26
Εκτύπωση

Re: Τα πάντα για την C

Δημοσίευσηαπό Star_Light » 28 Φεβ 2012, 20:05

migf1 έγραψε:Εννοείται πως πρέπει να διαβάσεις πως δουλεύει η scanf()... γιατί έτσι δουλεύουν και η fscanf() και η sscanf(). Το ότι η scanf() δημιουργεί προβλήματα είναι σίγουρο, αλλά πρέπει να ξέρεις πως λειτουργεί (και μετά θα είσαι σε θέση να αποφασίζεις πότε και γιατί πρέπει να την αποφεύγεις).

ΥΓ. Σε αυτά που γράφεις στη 2η παράγραφό σου δεν καταλαβαίνω τι λες (τι <κενό> και -> είναι αυτά που γράφεις; )


Ειναι το space μετα το 1 και μετα παλι space απο το πληκτρολογιο... το -> ειναι βελακι

τελοςπαντων.... θα το ξαναδιαβασω και θα ρωτησω αν ειναι.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι