Προς το περιεχόμενο

Ερώτηση αρχάριου για fscanf στην C


dslakias

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ένα αρχείο στην εξής μορφή:

 

1 2 3

2 3 4

Θέλω με την fscanf να παρω τις τιμές της πρώτης γραμμής και να υπολογίσω κάτι.

Ωραία μέχρι εδώ το έχω κάνει.

Μετά πρέπει με τις τιμές της δεύτερης γραμμής να υπολογίσω το ίδιο πράγμα.Πώς θα δηλώσω στην fscanf να πάρει τις τιμές της δεύτερης γραμμής ? Αν γράψω ότι έγραψα και για την πρώτη γραμμή μου εκτελεί το πρόγραμμα υπολογίζει την τιμή με τις τιμές της πρώτης γραμμής και μετά βγάζει σφάλμα στην εφαρμογή.Θα μπορούσα να δηλώσω περισσότερες μεταβλητές και να πάρω τα αποτελέσματα απο το αρχείο μόνο απο μία fscanf

αλλά εγώ θέλω να το κάνω σε 2 βήματα με τις μεταβλητές να παραμένουν οι ίδιες.

κάποιο help ty.

Δημοσ.

Δοκίμασε αυτό αν σου κάνει....με την 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)

Δημοσ.
Δοκίμασε αυτό αν σου κάνει....με την 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 έχει μια \ στο τέλος της πρώτης σειράς και έχει σχόλιο στο βιβλίο "ανάγνωση της πρώτης σειράς"

Δημοσ.

Λογικά στο βιβλίο έπρεπε να γράφει:

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);

πράξεις...αποτέλεσμα

;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...