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

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

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

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

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

Το seperator μετα απο την define ειναι συνώνυμο - ισοδύναμο με το ';'

stamatiou έγραψε:else {
arrstr[i][j] = '\0';
i++;
j = 0;
}


Aν βρει ; θα βάλει '\0' και θα "τερματίσει" την γραμμή , βγαίνει απο το loop της for
το \n ειναι για αλλαγή γραμμής.

Γενικα αν έχεις τον τελεστή && έστω κάτι να μην ισχύει απο τα αριστερά ή τα δεξιά βγαίνει ψευδής ολοκληρη η παράσταση.
Γνώσεις ⇛ 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/C++

Δημοσίευσηαπό stamatiou » 05 Φεβ 2012, 17:41

Star_Light έγραψε:Το seperator μετα απο την define ειναι συνώνυμο - ισοδύναμο με το ';'

stamatiou έγραψε:else {
arrstr[i][j] = '\0';
i++;
j = 0;
}


Aν βρει ; θα βάλει '\0' και θα "τερματίσει" την γραμμή
το \n ειναι για αλλαγή γραμμής.

Star_Light εξηγείς λίγο την απάντησή σου γιατί δεν πολυκατάλαβα τι θες να πεις....
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

Κώδικας: Επιλογή όλων
for (bi=0;
i < NSTRINGS && bi < MAXSTRLEN && str[bi] != '\0' && str[bi] != '\n';
bi++)
{

if (str[bi] != SEPARATOR && j < MAXSTRLEN ) {
arrstr[i][j++] = str[bi];
}
else {
arrstr[i][j] = '\0';
i++;
j = 0;
}


Για bi=0 μέχρι το i να ειναι μικροτερο απο το NSTRINGS αλλα και το bi να ειναι μικροτερο απο MAXSTRLEN και στο bi στοιχειο του str να μην υπάρχει ο μηδενικος χαρακτήρας (να μην έχεις φτάσει στο τέλος του string με αλλα λογια) και να μην υπάρχει μεσα ο χαρακτηρας αλλαγης γραμμης αυξανε μου το bi μετα πας σε εναν ελεγχο μεσω της if μεσα στο σωμα της for και λες οτι οσο το bi στοιχειο του πινακα δεν ειναι SEPARATOR (το οποιο έχεις ορισει με μια define) && j < MAXSTRLEN κάνε αυτο που έχεις μεσα στο σωμα της if .

Aλλιως θέσε εναν χαρακτήρα μηδενικο και βάλε ενα τελος στο string. Προφανως ο κωδικας αυτος ταυτίζει το ; με το '\n' υπο την έννοια οτι θα αλλάξει γραμμή και με τα 2 αυτά.
Γνώσεις ⇛ 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/C++

Δημοσίευσηαπό migf1 » 05 Φεβ 2012, 18:59

stamatiou έγραψε:Να σαι καλά migf1 γιατί με τέτοια προγραμματιστική χαζομάρα που με δέρνει δεν ξέρω τι θα έκανα.... :D
Αυτό γίνεται και με seperator να έχω το \n; Νομίζω όμως πως έτσι θα υπάρχει πρόβλημα με την fgets στη main...
Επίσης γιατί δεν θέλουμε να συναντήσουμε \n στο for loop της tokensize_str;

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

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

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

migf1 έγραψε:
stamatiou έγραψε:Να σαι καλά migf1 γιατί με τέτοια προγραμματιστική χαζομάρα που με δέρνει δεν ξέρω τι θα έκανα.... :D
Αυτό γίνεται και με seperator να έχω το \n; Νομίζω όμως πως έτσι θα υπάρχει πρόβλημα με την fgets στη main...
Επίσης γιατί δεν θέλουμε να συναντήσουμε \n στο for loop της tokensize_str;

Πες μου τι θες να κάνεις ακριβώς.

Κάθε γραμμή να ποθηκεύεται σε μια σειρά της 2D Array.
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

Ναι, αυτό το το κατάλαβα... αλλά ο γενικότερος στόχος ποιος είναι, για να καταλάβω πράγματα όπως π.χ. η είσοδος γίνεται υποχρεωτικά από αρχείο; το κάθε string στον πίνακα από strings αντιστοιχεί σε μια ολόκληρη γραμμή του αρχείου ή π.χ. θα μπορούν να χρησιμοποιηθούν κι ενδιάμεσοι διαχωριστές (όπως π.χ. ο χαρακτήρας ';' που έβαλα στο προηγούμενο παράδειγμα. Υπάρχουν όρια π.χ. στο μήκος της κάθε γραμμής του αρχείου ή/και στο πλήθος των strings που θα μπορεί να φιλοξενήσει ο πίνακας από strings;

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

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

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

Θέλω να κάνω ένα πρόγραμμα για να οργανώσω την βιβλιοήκη μου και θέλω να το κάνω έτσι ώστε να καταγράφει το τίτλο σε ένα txt file και να το διαβάζει σε κάθε εκκίνηση μεταφέροντάς το σε ένα διπλό πίνακα...
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

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

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

Να ρωτήσω και εγω κατι?

Ο παρακάτω κώδικας

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

#include <stdio.h>
int func1(int x , int y);
int func2(int x , int y);

int main()
{
int r1 , r2;
int x, y ;

printf("Give x: ");
scanf("%d" , &x);

printf("Give y : ");
scanf("%d" , &y);

r1=func1(x,y);
r2=func2(x,y);
printf("Result of (+) is : %d" , r1);
printf("Result of(-) is : %d" , r2);


return 0;
}
int func1(int x , int y)
{
return (x+y);
}
int func2( int x , int y)
{

return(x-y);
}


Μπορει να περιγράψει την στοίβα στην μνήμη καπως ετσι ->

Εικόνα

Και αν μεσα απο την συνάρτηση func1() καλέσω την func2() θα μπορούσε να ειναι έτσι ->

Εικόνα
Γνώσεις ⇛ 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/C++

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

stamatiou έγραψε:Θέλω να κάνω ένα πρόγραμμα για να οργανώσω την βιβλιοήκη μου και θέλω να το κάνω έτσι ώστε να καταγράφει το τίτλο σε ένα txt file και να το διαβάζει σε κάθε εκκίνηση μεταφέροντάς το σε ένα διπλό πίνακα...

Με fixed μέγιστο πλήθος γραμμών και fixed μέγιστο μήκος της καθεμιάς, είναι πολύ εύκολο...

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

int main( void )
{
int i = 0;
char arrstr[ NSTRINGS ][ MAXSTRLEN ] = { {'\0'} }; /* array of c-strings */
FILE *fp = fopen("test4.c", "r");

if ( !fp ) {
fputs("*** fatal error: Could not open file!\n", stderr);
exit( EXIT_FAILURE );
}

for (i=0; i < NSTRINGS && fgets( arrstr[i], MAXSTRLEN, fp); i++ )
{
/* remove '\n', if any, from end of just-read line */
size_t len = strlen( arrstr[i] ) - 1;
if ( arrstr[i][len] == '\n' )
arrstr[i][len] = '\0';
}

print_arrstr( arrstr );

fclose( fp );
exit( EXIT_SUCCESS );
}
Τελευταία επεξεργασία από migf1 και 05 Φεβ 2012, 21:54, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

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

Star_Light έγραψε:
...
Ο παρακάτω κώδικας
...
Μπορει να περιγράψει την στοίβα στην μνήμη καπως ετσι -> ...

Ναι

έγραψε:Και αν μεσα απο την συνάρτηση func1() καλέσω την func2() θα μπορούσε να ειναι έτσι -> ...

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

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

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