karabouzouk... Δημοσ. 6 Ιουνίου 2008 Δημοσ. 6 Ιουνίου 2008 Η ερώτηση μου αφορά την εντολή x=fopen("records.dat","r+"); για παραδειγμα... Στη θέση του records.dat μπορώ να βάλω και την ακριβή διεύθυνση του αρχείου... Τι γίνεται αν θέλω να "περασω" τη διεύθηνση στην εντολή μέσω μιας μεταβλητης συμβολοσειράς για παραδειγμα.... Δλδ αν θέλω να ρωτήσω το χρήστη "που θέλεισ να αποθηκευτούν οι πληροφοείες" και μετα να κανω scanf σε μια μεταβλητή το path και να τη χρησιμοποιήσω στην fopen πχ... Ευχαριστώ!
parsifal Δημοσ. 7 Ιουνίου 2008 Δημοσ. 7 Ιουνίου 2008 Γίνεται μια χαρά αυτό που λες. Πού περίμενες να υπάρχει πρόβλημα; Δες π.χ. τον παρακάτω κώδικα, ένα παράδειγμα αυτού που θέλεις να κάνεις, αλλά με δημιουργία αρχείου: > #include <stdio.h> #include <string.h> int main(void) { char Path[256]; FILE *outfile; printf("This program writes a \"Hello World!\" message to a file with variable path determined by the user\n\n"); printf("Enter path for output file: "); scanf("%s", Path); if(strlen(Path) + strlen("HelloWorld.txt") > 255) return 1; strcat(Path, "HelloWorld.txt"); if((outfile = fopen(Path, "w")) == NULL) return 2; fprintf(outfile, "Hello World!\n"); fclose(outfile); return 0; }
karabouzouk... Δημοσ. 7 Ιουνίου 2008 Μέλος Δημοσ. 7 Ιουνίου 2008 Πόσο γελοίο μπορούσε να είναι.... Απλά είμαι αρχάριος και τώρα τα έμαθα αυτα και μου είχε μείνει σαν γενική μορφή οτι η μεταβλητή του path η το path αυτό καθ αυτο πρέπει να είναι σε "..." Τέλος πάντων τώρα μου φένεται πως ήταν γελοίο να το σκευτώ.... Ευχαριστώ πάντως....
karabouzouk... Δημοσ. 16 Ιουνίου 2008 Μέλος Δημοσ. 16 Ιουνίου 2008 Το έκανα έτσι όπως ακριβώς στο παράδειγμα που μου είπες αλλά ο compiler βγάζει error ότι δεν συντάσσω σωστά τη συνάρτηση.... Έχω το Turbo C αν υπάρχει περίπτωση να φταίει αυτο...
parsifal Δημοσ. 16 Ιουνίου 2008 Δημοσ. 16 Ιουνίου 2008 Πολύ πιθανόν, μιλάμε για πανάρχαιο compiler. Σε GCC 3.4.2 και 4.3.1 γίνεται compile και τρέχει μια χαρά, πάντως. Για κάνε ένα copy-paste τον κώδικα που τελικά έγραψες και το ακριβές μήνυμα λάθους του Turbo C...
karabouzouk... Δημοσ. 17 Ιουνίου 2008 Μέλος Δημοσ. 17 Ιουνίου 2008 Κώδικας: if(ep==1) b=fopen("Data_DMJB.dat","r+"); if(ep==2){ printf("\nDwse onoma arxeiou dedomenwn..\n\n Onoma --> "); scanf("%s",path_name); b=fopen(path_name,"r+"); if(! b=fopen(path_name.dat,"r+"); } if(ep==3){ printf("\nDwse dieuthynsh dedomenwn me onoma arxeiou..\n\n Dieuthynsh --> "); scanf("%s",path_name); b=fopen(path_name,"r+"); if(! b=fopen(path_name.dat,"r+"); } if(!{ printf("\nLathos plhktrologhsh. Ksanaprospathhste h pathste 4 gia dhmiourgia\n"); flag=1; } Μηνύματα σφαλμάτος: για κάθε φορά που χρησιμοποιώ το b=fopen(path_name.dat","r+") μου βγάζει Illegal structure operation in function main... Βασικά τώρα παρατήρησα οτι έβγαλε σφάλμα μόνο οταν έγραφα path_name.dat και όχι οταν έβαζα σκέτο το path_name μεσα στην fopen.. μάλλον αυτό ειναι το λάθος.. Απλά υπέθεσα οτι μπορεί ο χρήστης να μην γραψει στο τέλος του path ότι .dat Αυτό χρειάζεται να μπει έτσι δεν είναι..? Αν είναι έτσι όπως τα είπα με ποια συνάρτηση θα ενσωματώσω το .dat στο υπόλοιπο path..? Και αφού σε ευχαρηστήσω που ασχολήθηκες ποιο compiler μου πρωτείνεις να χρησιμοποιώ..?
parsifal Δημοσ. 17 Ιουνίου 2008 Δημοσ. 17 Ιουνίου 2008 Όταν έχεις αποθηκευμένο ένα path στον πίνακα χαρακτήρων με όνομα path_name, δε μπορείς απλά να κολλήσεις ένα .dat στο τέλος του ονόματος του πίνακα και να θεωρήσεις ότι βγαίνει κάποιο νόημα από αυτό. Στον παρακάτω κώδικα: >b=fopen(path_name.dat,"r+"); ...ο compiler βλέπει την τελεία και θεωρεί ότι αναφέρεσαι στο μέλος dat ενός struct με όνομα path_name. Εσύ όμως έχεις ορίσει το path_name ως πίνακα χαρακτήρων και όχι ως struct. Εξ ου και το λάθος. Αν πρόσεξες στο αρχικό post μου, ένωνα το string που περιέχει το path και το string που περιέχει το filename με τη συνάρτηση strcat. Κάτι παρόμοιο θα πρέπει να κάνεις κι εσύ. Προτάσεις για περιβάλλοντα ανάπτυξης C και C++ υπάρχουν πάρα πολλές. Κάνε μία Αναζήτηση στην παρούσα ενότητα του Προγραμματισμού π.χ. για τον όρο Dev-C++ ή CodeBlocks και διάβασε ολόκληρα τα θέματα στα οποία εμφανίζονται αυτές οι λέξεις για να πάρεις μία ιδέα.
karabouzouk... Δημοσ. 17 Ιουνίου 2008 Μέλος Δημοσ. 17 Ιουνίου 2008 ok έχεις δίκιο ευχαριστώ για την βοήθεια... αν προκείψει τίποτε άλλο θα ρωτήσω εδώ..!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.