dslakias Δημοσ. 27 Νοεμβρίου 2007 Δημοσ. 27 Νοεμβρίου 2007 Έχω ένα αρχείο στην εξής μορφή: 1 2 3 2 3 4 Θέλω με την fscanf να παρω τις τιμές της πρώτης γραμμής και να υπολογίσω κάτι. Ωραία μέχρι εδώ το έχω κάνει. Μετά πρέπει με τις τιμές της δεύτερης γραμμής να υπολογίσω το ίδιο πράγμα.Πώς θα δηλώσω στην fscanf να πάρει τις τιμές της δεύτερης γραμμής ? Αν γράψω ότι έγραψα και για την πρώτη γραμμή μου εκτελεί το πρόγραμμα υπολογίζει την τιμή με τις τιμές της πρώτης γραμμής και μετά βγάζει σφάλμα στην εφαρμογή.Θα μπορούσα να δηλώσω περισσότερες μεταβλητές και να πάρω τα αποτελέσματα απο το αρχείο μόνο απο μία fscanf αλλά εγώ θέλω να το κάνω σε 2 βήματα με τις μεταβλητές να παραμένουν οι ίδιες. κάποιο help ty.
charllestone Δημοσ. 27 Νοεμβρίου 2007 Δημοσ. 27 Νοεμβρίου 2007 Δοκίμασε αυτό αν σου κάνει....με την fgets.... >#include <stdio.h> FILE *p; long filesize; char c; void loopa(); int openfile(); int fin(); main() { char name[100]; printf("give the name of the txt file (ex \"myfile.txt\") :"); scanf("%s", name); openfile(name); //loopa(); }void loopa(){ main(); } /*int fin(){ return 1; }*/ int openfile(ptr) char *ptr; { p = fopen( ptr,"r"); if (p==NULL){ //otan to arxeio einai adeio printf("can't open file %s for reading!\n\n", ptr); return 1; } //alliws c = fgetc(p); printf("\n----[output]----\n\n"); while (c!=\n) { //diavazei ta stoixeiamexri to telos ths grammhs printf("%c",c); c = fgetc(p); } fseek(p, 1, SEEK_CUR); //metakineis ton kersora sto telos ths grammhs, //ekei pou vrisketai twra dhladh fclose(p); printf("\n----[output]----\n\n"); getchar(); return 0; } απλά αντί για τη μεταβλητή C καλύτερα χρησιμοποίησε πίνακα οπου θα σώζεις τις τιμές (int)
dslakias Δημοσ. 27 Νοεμβρίου 2007 Μέλος Δημοσ. 27 Νοεμβρίου 2007 Δοκίμασε αυτό αν σου κάνει....με την fgets.... >#include <stdio.h> FILE *p; long filesize; char c; void loopa(); int openfile(); int fin(); main() { char name[100]; printf("give the name of the txt file (ex \"myfile.txt\") :"); scanf("%s", name); openfile(name); //loopa(); }void loopa(){ main(); } /*int fin(){ return 1; }*/ int openfile(ptr) char *ptr; { p = fopen( ptr,"r"); if (p==NULL){ //otan to arxeio einai adeio printf("can't open file %s for reading!\n\n", ptr); return 1; } //alliws c = fgetc(p); printf("\n----[output]----\n\n"); while (c!=\n) { //diavazei ta stoixeiamexri to telos ths grammhs printf("%c",c); c = fgetc(p); } fseek(p, 1, SEEK_CUR); //metakineis ton kersora sto telos ths grammhs, //ekei pou vrisketai twra dhladh fclose(p); printf("\n----[output]----\n\n"); getchar(); return 0; } απλά αντί για τη μεταβλητή C καλύτερα χρησιμοποίησε πίνακα οπου θα σώζεις τις τιμές (int) Ευχαριστώ για την απάντηση αλλά: 1) Ακόμα δεν γνωρίζουμε την fgets ,ούτε βρόχους,ούτε για συναρτήσεις και πίνακες. 2)το βιβλίο σε ίδιο παράδειγμα δίνει τον εξής κώδικα(τουλάχιστον με αυτα που γνωρίζουμε εμείς μέχρι τώρα): 1 Δηλώνει τις μεταβλητές + το αρχείο. 2 Ανήγει το αρχείο με fopen. 3 fscanf(arxeio,"%d %f %f\ %f",&a,&b,&c,&d); 4 Πράξεις 5 printf.... μέχρι εδώ διαβάζει την πρώτη γραμμή του αρχείου.μετά κάνει ακριβώς το ίδιο πράγμα και για την άλλη γραμμή από τα βήματα 3 μέχρι 5. Στο βήμα 3 έχει μια \ στο τέλος της πρώτης σειράς και έχει σχόλιο στο βιβλίο "ανάγνωση της πρώτης σειράς"
bird Δημοσ. 29 Νοεμβρίου 2007 Δημοσ. 29 Νοεμβρίου 2007 Λογικά στο βιβλίο έπρεπε να γράφει: fscanf(arxeio,"%d %f %f\n %f",&a,&b,&c,&d); Με αυτόν τον τρόπο διαβάζει τις τρεις μεταβλητές από την πρώτη γραμμή και μετά πάει από κάτω. Δεν έχω καταλάβει ακριβώς τι θέλεις να κάνεις. Μπορείς να Postaρεις τον κώδικα σου να δούμε τι λάθος έχει; Δεν μπορείς να χρησιμοποιήσεις κάτι της μορφής: ... fscanf(arxeio,"%d %d %d",&a,&b,&c); πράξεις...αποτέλεσμα fscanf(arxeio,"%d %d %d",&a,&b,&c); πράξεις...αποτέλεσμα ;
blaoulis Δημοσ. 29 Νοεμβρίου 2007 Δημοσ. 29 Νοεμβρίου 2007 re charllestone ti anapodi lisi tu protines?? auto pu leei o bird kane.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.