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

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

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

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

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

Ναι αυτό θέλουμε Γιώργο. Όχι δεν χρειάζεται πρώτα να πατήσει ENTER o χρήστης, μπορείς να μετράς κανονικά πόσα getchar() έχουν προηγηθεί του ENTER. Η καταμέτρηση ενδεχομένως να γίνει εκ των υστέρων (αφού πατηθεί το ENTER), αλλά τον κώδικά δεν τον ενδιαφέρει πότε θα την κάνει ο φλοιός.
Τελευταία επεξεργασία από migf1 και 19 Φεβ 2012, 20:05, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

migf1 έγραψε:Ναι αυτό θέλουμε Γιώργο. Όχι δεν χρειάζεται πρώτα να πατήσει ENTER o χρήστης, μπορείς να μετράς κανονικά πόσα getchar() έχουν προηγηθεί του ENTER. Η καταμέτρηση ενδεχομένως να γίνει εκ των υστέρων πατηθεί το ENTER, αλλά τον κώδικά δεν τον ενδιαφέρει τι θα κάνει ο φλοιός.

Τέλεια! Λοιπόν θα διαβάσω εγώ τώρα λίγα γερμανικά και μετά επανέρχομαι στη C!
Off topic:
Αυτό με το φλοιό από που προέκυψε;
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

stamatiou έγραψε:Off topic:
Αυτό με το φλοιό από που προέκυψε;

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

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

Δημοσίευσηαπό stamatiou » 19 Φεβ 2012, 21:03

migf1 έγραψε:Δεν πρέπει να διαβάζεις με fgets() το s. Πρέπει να διαβάζεις ολόκληρη την κύρια είσοδο με getchar().

Η getchar όμως χρειάζεται να πατηθεί enter για να πάρουμε τα δεδομένα. Έψαξα και λίγο στο γόογλε αλλά λέει ότι δεν υπάρχει τρόπος να γίνει αυτό με συνάρτηση από τις βασικές βιβλιοθήκες :/
1Γνώσεις→Linux: Αρχάριος┃Προγραμματισμός:Αρχάριος┃Αγγλικά:Μέτριος
2Λειτουργικό→Arch Linxu 32bit
3Προδιαγραφές→2x AMD AthlonX2 DualCore QL-66 ‖ RAM 1751 MiB ‖ Hewlett-Packard 308C - Hewlett-Packard Compaq 615
4Κάρτες γραφικών:ATI RS780M/RS780MN [Radeon HD 3200 Graphics][1002:9612]
5Δίκτυα:eth0:Marvell 88E8042 PCI-E Fast Ethernet Controller [11ab:4357] (rev 10)⋮eth1: Broadcom BCM4312 802.11b/g LP-PHY [14e4:4315](rev 01)
Πρωσοπική Ιστοσελίδα: http://giwrg98.co.cc
Άβαταρ μέλους
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

stamatiou έγραψε:
migf1 έγραψε:Δεν πρέπει να διαβάζεις με fgets() το s. Πρέπει να διαβάζεις ολόκληρη την κύρια είσοδο με getchar().

Η getchar όμως χρειάζεται να πατηθεί enter για να πάρουμε τα δεδομένα. Έψαξα και λίγο στο γόογλε αλλά λέει ότι δεν υπάρχει τρόπος να γίνει αυτό με συνάρτηση από τις βασικές βιβλιοθήκες :/

Κι αυτό γιατί δουλεύει αφού δεν υπάρχει τρόπος; :P
Κώδικας: Επιλογή όλων

char *s_getany( int chunklen )
{
int i = 0; /* char counter */
char *s = NULL, *try = NULL;

/* sanity checks */
if ( chunklen < 1 || NULL == (s = calloc( chunklen+1, sizeof(char)) ) )
return NULL;

for (i=0; EOF != (s[i] = getchar()) && s[i] != '\n'; i++)
{
if ( i != 0 && i % chunklen == 0 ) /* needs realloc */
{
try = realloc(s, (i+chunklen+1) * sizeof(char) );
if ( !try ) { /* realloc failed */
free(s);
s = NULL;
return NULL;
}
s = try; /* accept realloc */
}
}
s[i] = '\0';

if ( NULL == (try = realloc(s, (i+1) * sizeof(char) )) )
return NULL;

return try;
}

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

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

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

Αυτη ειναι η λύση της άσκησης????? Θα την πάρω να της βάλω σχολια :D
Γνώσεις ⇛ 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

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

Ρε συ τον καταλαβαινω απολυτα τον κώδικα αλλα εχω αδυναμία στο να τον φτιάξω μονος μου
φταιει που ειναι "αρχη" ακομη? :(

http://ideone.com/9me7S

η συναρτηση σου με σχολια απο μενα.
Γνώσεις ⇛ 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 » 20 Φεβ 2012, 01:01

Από τα σχόλια που έβαλες δεν φαίνεται να έχεις καταλάβει πως και γιατί δουλεύει ο κώδικας. Καταρχήν τα διασταύρωσες τα σχόλια που έγραψες αν ισχύουν τρέχοντας τη συνάρτηση;

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

if ( i != 0 && i % chunklen == 0 ) // Aπο i=1 θες αλλιώς δίνοντας 6 μήκος string μέχρι να φτάσει
// στο τελευταίο στοιχείο το οποίο ειναι αυτο που έχει υπόλοιπο i με chunklen 0
// δηλαδη 6/6 θα ήθελες 7 στοιχεία (απο i=0)
το τεστάρισες να δεις αν ισχύει αυτό που γράφεις;
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

Οχι στο χαρτι το "δουλεψα" τωρα φτιάχνω την main
για να μπορεσω να τρεξω την συνάρτηση.
Γνώσεις ⇛ 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

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

http://ideone.com/OnyjY

Δεν δουλεύει. Βασικα το δοκιμασα και με την gets .

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

kostas@kostas-SSL:~/PROGRAMS$ ./dokimes
Give the length: 4
kostas@kostas-SSL:~/PROGRAMS$


p.s Λαθος. Η συναρτηση δεν ειναι void... μισο να το διορθωσω
Γνώσεις ⇛ 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
Εκτύπωση

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

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