1

My problem is this I have a txt file name file.txt with the data. I need to input this for do some calculations,this how the code run:

Please enter input file name
file.txt
File file.txt
STUDENT NAME STUDENT NO.  SUBJECT A    SUBJECT B    
JOAN             1           70.5           85.0
TANIA            2           49.0           75.0
TOM              3           53.0           54.0
JEFF             4           80.0           49.5
SUSAN            5           89.0           90.0
KATHY            6           99.0           55.0
RAYMOND          7           22.5           75.0

This is the data given in the file. So for example if I arrange Subject_A column in ascending order. Column Name and Subject_B Not arrange corresponding with Subject_A, this how the code continue:

Please enter a command (enter h for help): h
a/1 to obtain all the students that got diploma
b/2 to arrange subject A in ascending order
c/3 to calculate the average and standard deviation
d/4 to save all the above results in an output file
e to exit
2
Subject A in ascending order
STUDENT NAME SUBJECT A    SUBJECT B    
JOAN             22.5        85.0
TANIA            49.0        75.0
TOM              53.0        54.0
JEFF             70.5        49.5
SUSAN            80.0        90.0
KATHY            89.0        55.0
RAYMOND          99.0        75.0

And here is my problem, the first one is 22.5 and corresponds to Raymond ( in the .txt given see above ) and the note B 75 and in the program I get it is Joan with the note of 22.5 and 85 in the b. Because I only order A and the rest of the data is not corresponding. Each student has to correspond with her grade in the subject.

This is my code for order subject A but not for order each row with each student correspondent:

void option_ordering_A(){
    while ( !feof( ptrCf ) ) {
        //printf( "%.1f\n", subject_A );
        a[i]=subject_A;
        fscanf( ptrCf, "%s%d%lf%lf", student_name, &student_No, &subject_A, &subject_B );
        i=i+1;
        } /* end while */
          for (i = 0; i < (SIZE - 1); i++) 
          { 
            for (j = i + 1; j < SIZE; j++) 
            { 
              if (a[j] < a[i]) 
              { 
                temp = a[j]; 
                a[j] = a[i]; 
                a[i] = temp; 
              }
            } 
          }
          /* Show Numbers Sorted */
          rewind( ptrCf );

          printf( "%-10s%-13s%-13s\n", "\nSTUDENT NAME ", "SUBJECT A" , "SUBJECT B");
          fscanf( ptrCf, "%s%d%lf%lf", student_name, &student_No, &subject_A, &subject_B );
          for (i = 0; i < SIZE; i++) 
          { 
            printf( "%-13s%8.1f%12.1f\n", student_name, a[i], subject_B );
            fscanf( ptrCf, "%s%d%lf%lf", student_name, &student_No, &subject_A, &subject_B );
            //printf("%.1f, ", a[i]); 
          } 
          printf("\n\n\n");

}

edit: variable declarations, and functions.

float a [SIZE];
float b [SIZE];
int j;
int i = 0;
float temperature;
char student_name [30];
character arrays typedef [30];
matrices c [SIZE];
int student_No;
double subject_A;
double subject_B;

and the functions part:

//////////////////////FUNTIONS//////////////////////////////////////////////////////////////

/* Read the student's name, student's number, Subject A and Subject B */
void Read_File(){
printf( "%-10s%-13s%-13s%-13s\n", "\nSTUDENT NAME ", "STUDENT NO.", "SUBJECT A" , "SUBJECT B");
fscanf( ptrCf, "%s%d%lf%lf", student_name, &student_No, &subject_A, &subject_B );
}

////////////////////////////////////7//Show File///////////////////////////
void show_File(){
while ( !feof( ptrCf ) ) {
printf( "%-13s%5d%15.1f%15.1f\n", student_name, student_No, subject_A, subject_B );
fscanf( ptrCf, "%s%d%lf%lf", student_name, &student_No, &subject_A, &subject_B );
} /* end while */
}

 
  • 2
    Use an array of structures? One element per "student"? – Some programmer dude Sep 09 '21 at 06:28
  • 3
    [Why is “while ( !feof (file) )” always wrong?](https://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong) – Lundin Sep 09 '21 at 06:34
  • 1
    Please post all variable declarations used by this code and the stuct typedef as well. – Lundin Sep 09 '21 at 06:38
  • 1
    I not use struct, only functions, switch and pointers. [you can check my code here](https://github.com/NisleidySantiago/C-programming--language/blob/main/califications.c) if you want to test. I really not understand what is the best way for do this arrangement. all my code is wrong for do this? – Nisleidy Santiago Sep 09 '21 at 06:57
  • That was not a question if you use structs but a suggestion to do it to fix your problem. They are useful to combine data that belongs together. Just as your data within a line of the text file. Store these values in a struct and then sort the array of structs instead array of numbers. – Gerhardh Sep 09 '21 at 07:47
  • When asking for definitions, the intention was to see the real code, not some funny pseudo code thingy: `character arrays typedef [30];` – Gerhardh Sep 09 '21 at 07:48

1 Answers1

1

Has it already been said in the comment section, it will be much easer for you to use structs in your code. something like that (you can alter it as you see fit):

typdef struct Student {
    char student_name[30];
    int student_No;
    double subject_A;
    double subject_B;
};

make a struct variable: Student s; in the function.

Then when you call scanf function you call it like that : fscanf(ptrCf, "%s%d%lf%lf", s.student_name, &s.student_No, &s.subject_A, &s.subject_B);

in function option_ordering_A() you make an array of structs and not just for subject A

After that, you can sort the array of structs by subject A and all related data will change with it too.