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

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

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

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

Δημοσίευσηαπό g1wrg0s » 26 Ιουν 2012, 09:56

Το **α δεν μπορει να περασει με παραμετρο α[][number] σε μια συναρτηση.
Ευχαριστω για τη βοηθεια.
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Πρώτα βήματα
2 Ubuntu 12.10 quantal 3.10.20-031020-generic 32bit (el_GR.UTF-8, Unity ubuntu), Windows 8
3 Intel Core i5-3230M CPU @ 2.60GHz ‖ RAM 7923 MiB ‖ Acer VA50_HC_CR - Acer Aspire V3-571G
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915} ⋮ nVidia Device [10de:0fe1] {}
5 eth0: Broadcom NetLink BCM57785 Gigabit Ethernet PCIe [14e4:16b5] (rev 10) ⋮ wlan0: Atheros Inc. AR9462 Wireless Network Adapter [168c:0034] (rev 01)
g1wrg0s
punkTUX
punkTUX
 
Δημοσιεύσεις: 196
Εγγραφή: 26 Μάιος 2012, 10:29
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 26 Ιουν 2012, 21:17

Παίζω σιγά-σιγά με τη C: https://github.com/medigeek/isdst/blob/master/isdstd.c

Χρειάζομαι read+write access και να δημιουργήσει το αρχείο ".isdst" αν δεν υπάρχει. Μήπως ξέρει κανείς γιατί το fscanf «δεν δουλεύει» με "w+"; Δοκίμασα και το fgets και άλλα, αλλά το μόνο που δούλευε (νομίζω) ήταν όταν διάβαζα ένα-ένα τους χαρακτήρες.


Μορφοποιημένος Κώδικας: Επιλογή όλων
//Create the file
FILE *fh = fopen(TSFILE, "w");
fclose(fh);

//w+ doesn't work with fscanf
fp = fopen(TSFILE, "r+");
fscanf(fp, "%ld", &lastchk);
rewind(fp);
tlast = localtime(&lastchk);
wasdst = tlast->tm_isdst;


Το «δεν δουλεύει» το έγραψα σε εισαγωγικά, επειδή δουλεύει, δεν πετάει σφάλμα, αλλά μου βγάζει διαφορετικούς, μη αναμενόεμενους αριθμούς:
Μορφοποιημένος Κώδικας: Επιλογή όλων
printf("Retrieved last check from file: %ld DST: %d\n", lastchk, wasdst);


έγραψε:Retrieved last check from file: 140735036461784 DST: 1


Οι αριθμοί των δευτερολέπτων θα έπρεπε να είναι πιο λίγοι, π.χ.
έγραψε:Retrieved last check from file: 1340734900 DST: 1


Edit: Παράξενο, τώρα δεν διαβάζει απ' το αρχείο και εμφανίζει 0 παρόλο που όντως γράφει στο αρχείο.. :P
Edit 2: Διορθώθηκε αλλά ακόμη έμεινα με την απορία για το "w+"
Τελευταία επεξεργασία από medigeek και 26 Ιουν 2012, 21:49, έχει επεξεργασθεί 1 φορά/ες συνολικά
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 26 Ιουν 2012, 21:47

Off topic:
Ωραίος, έχεις δουλέψει. Το έκανα και follow, αν θες κάνε και εσύ follow σε ένα από τα δικά μου project: https://github.com/giwrg98 Όταν βρω λίγο χρόνο, θα κοιτάξω τον κώδικά σου και θα προσπαθήσω να σε βοηθήσω :D
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

Δημοσίευσηαπό medigeek » 26 Ιουν 2012, 21:50

Ευχαριστώ :) Διορθωσα το πρόβλημα που είπα στο "Edit", αλλά ακόμη έμεινα με την απορία για το "w+" και το fscanf...
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 26 Ιουν 2012, 21:54

medigeek έγραψε:Ευχαριστώ :) Διορθωσα το πρόβλημα που είπα στο "Edit", αλλά ακόμη έμεινα με την απορία για το "w+" και το fscanf...

Κανονικά θα έπρεπε να δουλεύει πάντως, εφόσον δεν βάζεις τίποτα b μέσα στο mode :/
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

Δημοσίευσηαπό g1wrg0s » 26 Ιουν 2012, 22:35

Καλησπερα.

Δεν υπαρχει λογος να μην "δουλευει " η fscanf σε mode "w+" . Προτεινω το εξης. Εφοσον δεν παιρνεις τα αναμεννομενα αποτελεσματα , τοτε κοιτα αν οταν πας να διαβασεις βρισκεσαι οντως εκει που θες να εισαι.
Χρησιμοποιησε fseek και ftell για να πας εκει που θες ,καθως και να δεις που εισαι την καθε χρονικη στιγμη.

Ελπιζω να καταλαβαινεις τι εννοω. Αν οχι, τοτε χρησιμοποιησε τη φαντασια σου στο παρακατο σκεπτικο.
Εστω οτι μεσα στο αρχειο υπαρχει κερσορας και αυτος βρισκεται μετα απο καποιες λειτουργιες πριν απο το τεταρτο στοιχειο. Κανοντας fscanf διαβαζεις απο εκει και μετα . Αν εσυ θες το 15 στοιχειο , τοτε προφανως η fscanf δεν κανει τη δυλεια που θες και δυστυχως δεν ευθυνεται αυτη γι αυτο ,αλλα ουτε και το mode w+.

Μπορει να λεω ανοησιες αλλα προτρεπω να το τσεκαρεις.
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Πρώτα βήματα
2 Ubuntu 12.10 quantal 3.10.20-031020-generic 32bit (el_GR.UTF-8, Unity ubuntu), Windows 8
3 Intel Core i5-3230M CPU @ 2.60GHz ‖ RAM 7923 MiB ‖ Acer VA50_HC_CR - Acer Aspire V3-571G
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915} ⋮ nVidia Device [10de:0fe1] {}
5 eth0: Broadcom NetLink BCM57785 Gigabit Ethernet PCIe [14e4:16b5] (rev 10) ⋮ wlan0: Atheros Inc. AR9462 Wireless Network Adapter [168c:0034] (rev 01)
g1wrg0s
punkTUX
punkTUX
 
Δημοσιεύσεις: 196
Εγγραφή: 26 Μάιος 2012, 10:29
Εκτύπωση

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

Δημοσίευσηαπό g1wrg0s » 26 Ιουν 2012, 23:28

Βασικα, απο τη στιγμη που θες να ανοιξεις το αρχειο με mode w+ θα πρεπει να γνωριζεις οτι το αρχειο αυτο οτι και να ειχε μεσα το χανει. Η διαφορα μεταξυ του w+ και του r+ ειναι ακριβως αυτη (βασικα δεν γνωριζω εαν εχει αλλες ). Δηλαδη στην πρωτη περιπτωση το ανοιγει για εγγραφη-αναγνωση ως αδειο αρχειο ,ενω στην δευτερη απλα το ανοιγει για εγγραφη-αναγνωση.

fp = fopen(TSFILE, "w+");
fscanf(fp, "%ld", &lastchk);
η fscanf δεν διαβαζει τιποτα και αυτο φαινεται και απο την επιστρεφομενη τιμη της συναρτησης .
Spoiler: show
1 Γνώσεις Linux: Πρώτα βήματα ┃ Προγραμματισμού: Πρώτα βήματα ┃ Αγγλικών: Πρώτα βήματα
2 Ubuntu 12.10 quantal 3.10.20-031020-generic 32bit (el_GR.UTF-8, Unity ubuntu), Windows 8
3 Intel Core i5-3230M CPU @ 2.60GHz ‖ RAM 7923 MiB ‖ Acer VA50_HC_CR - Acer Aspire V3-571G
4 Intel 3rd Gen Core processor Graphics Controller [8086:0166] {i915} ⋮ nVidia Device [10de:0fe1] {}
5 eth0: Broadcom NetLink BCM57785 Gigabit Ethernet PCIe [14e4:16b5] (rev 10) ⋮ wlan0: Atheros Inc. AR9462 Wireless Network Adapter [168c:0034] (rev 01)
g1wrg0s
punkTUX
punkTUX
 
Δημοσιεύσεις: 196
Εγγραφή: 26 Μάιος 2012, 10:29
Εκτύπωση

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

Δημοσίευσηαπό stamatiou » 26 Ιουν 2012, 23:37

g1wrg0s έγραψε:Βασικα, απο τη στιγμη που θες να ανοιξεις το αρχειο με mode w+ θα πρεπει να γνωριζεις οτι το αρχειο αυτο οτι και να ειχε μεσα το χανει. Η διαφορα μεταξυ του w+ και του r+ ειναι ακριβως αυτη (βασικα δεν γνωριζω εαν εχει αλλες ). Δηλαδη στην πρωτη περιπτωση το ανοιγει για εγγραφη-αναγνωση ως αδειο αρχειο ,ενω στην δευτερη απλα το ανοιγει για εγγραφη-αναγνωση.

fp = fopen(TSFILE, "w+");
fscanf(fp, "%ld", &lastchk);
η fscanf δεν διαβαζει τιποτα και αυτο φαινεται και απο την επιστρεφομενη τιμη της συναρτησης .

Όντως! Μόνο που αν το κάνεις με "r+" τότε δε θα δημιουργήσεις αρχείο αν δεν υπάρχει. Γι' αυτό προτείνω να προσπαθήσεις να το ανοίξεις πρώτα με r+ και αν επιστρέφει NULL να προσπαθείς με "w+", αυτό κάνω και εγώ (νομίζω στο ComicOrg στο GitHub).
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

Δημοσίευσηαπό medigeek » 26 Ιουν 2012, 23:47

Ααα ευχαριστώ πολύ!!
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

Δημοσίευσηαπό medigeek » 27 Ιουν 2012, 00:11

Τελικά το έλυσα με την εντολή access():
Μορφοποιημένος Κώδικας: Επιλογή όλων
if (access(TSFILE, F_OK) != -1) {
fp = fopen(TSFILE, "r+");
fscanf(fp, "%ld", &lastchk);
rewind(fp);
} else {
// file does not exist
fp = fopen(TSFILE, "w+");
lastchk = 0;
}


Είναι POSIX (Unix specific): http://manpages.debian.net/cgi-bin/man.cgi?query=access
Εναλλακτική λύση το stat().
Πηγή: http://stackoverflow.com/questions/2300 ... s-platform
Κύπριος; Κόπιασε στο ubuntu-cy! ┃ Launchpad Debian Github
Οδηγός για νεοεισερχόμενους -- Αρχικές οδηγίες για αρχάριους χρήστες του Ubuntu

1 Γνώσεις Linux: Πολύ καλό ┃ Προγραμματισμού: Πολύ καλό ┃ Αγγλικών: Πολύ καλό
2 Ubuntu 12.10 quantal 3.5.0-21-generic 64bit (en_US.UTF-8, GNOME cinnamon2d), Ubuntu 3.5.0-19-generic, Windows 7
3 Intel Core2 Duo CPU E6550 2.33GHz ‖ RAM 5970 MiB ‖ MSI MS-7235
4 nVidia G73 [GeForce 7300 GT] [10de:0393] {nvidia}
5 eth0: Realtek RTL-8110SC/8169SC Gigabit Ethernet [10ec:8167] (rev 10)
Άβαταρ μέλους
medigeek
Freedom
Freedom
 
Δημοσιεύσεις: 5023
Εγγραφή: 24 Μάιος 2008, 14:49
Τοποθεσία: Σερβία/Κύπρος
Launchpad: medigeek
IRC: savvas
Εκτύπωση

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

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