Thread: Help with a code using File I/O and Loops

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Registered User
    Join Date
    Oct 2008
    Posts
    14

    Help with a code using File I/O and Loops

    It seems as though I've written the code perfectly, although its not executing properly. I have to read a bunch of data from a file (which i named test.txt) and then execute a bunch of options to the user via a menu. heres the code.
    Code:
    
    
    #include <stdio.h>
    
    int main(void)
    {
        //initialize variables
        char fname[128];
        int size = 0;
        FILE* fin;
        int count = 0;
        int option;
        int low_bound;
        int high_bound;
        int x;
        double average = 0;
        int lowest = -1;
        int highest = 0;
        int target_donation;
        int target_count = 0;
        int target_donation2;
        int target_count2 = 0;
        int target_donation3;
        double percentage;
        int sum = 0;
        int total_under;
        int number[size];
        
        
        //Prompts user for the name of their data file to read.
        printf("Please enter the name of the data file\n");
        scanf("%s", fname);
        
        //Notice the "r". If it were a "w" it would be writing, not reading to the file
        fin = fopen(fname, "r");
        
       
        //This line scans the file that it is reading, and is reading the numbers within the file
        fscanf("%d ",&size);
        
        
        //This while loop accumulates the number of numbers within the file.
        while(!feof(fin))
            {
              fscanf(fin,"%d ", &number[count]);
              count++;
            }
        
        //Close the file
        fclose(fin);
        
        
        //Tells the user how many numbers were read within the file
        printf("The data for %d numbers of contributions has been read.\n", count);
        
        
        while(1==1)
            {
                    
        
                //Now starts the menu process, asking the user for his/her choice
                printf("Please make a choice from the following options:\n");
        
                //Full menu
                printf("1. Calculate the average donation for a subset of the donations.\n");
                printf("2. Calculate the minimum donation for a subset of the donations.\n");
                printf("3. Calculate the maximum donation for a subset of the donations.\n");
                printf("4. Calculate the number of donations exceeding a target value.\n");
                printf("5. Calculate the number of donations of a particular dollar amount.\n");
                printf("6. Calculate what percentage of the donations (Value Wise) are under a target value.\n");
                printf("7. Quit\n");
        
        
                //Scanning the users option for the menu list
                scanf("%d", &option);
        
        
                //If the user chooses to quit, they will type 7, which the computer will read and return the program to quit
                if(option == 7)
                    {
                        system("PAUSE");
                        return 0;
                    }
        
        
                //I grouped options 1 to 3 because they all use the lower and higher bound variables.
                //I was going to individually write each option out, but grouping the 3 was easier.
                if((option >= 1)&&(option<=3))
                {
      
            
                    printf("What is the low bound for your group(0-%d)?\n", size);
                    scanf("%d", &low_bound);
             
                    printf("What is the high bound for your group(0-%d)?\n", size);
                    scanf("%d", &high_bound);
             
                    if(option==1)
                    {
                         for(x=low_bound; x<=high_bound; x++)
                            { 
                                average+=number[x];
                            }
                 
                                average=average/size;
                 
                       printf("The average donation from person %d to person %d is $%.2lf.\n", low_bound, high_bound, average);
                    }
             
                    if(option==2)
                    {
                         for(x=low_bound; x<=high_bound; x++)
                         {
                            if(number[x]<lowest)
                            {
                                 lowest=number[x];
                            }
                         }
                            printf("The smallest donation from person %d to person %d is $&d .\n", low_bound, high_bound, lowest);
                    }
             
                    if(option==3)
                    {
                        for(x=low_bound; x<=high_bound; x++)
                        {
                            if(number[x]>highest)
                            {
                                 highest=number[x];
                            }
                        }
                        
                        printf("The largest donation from person %d to person %d is $%d .\n", low_bound, high_bound, highest);
                    }
                }
        
                //Now to compute if the user selects option 4
                //This time around, I chose to split up the 3 options that use the common variable of a target donation
                if(option==4)
                {
                   printf("What is the target donation?\n");
                   scanf("%d", &target_donation);
            
                    for(x=lowest; x<highest; x++)
                    {
                        if(target_donation>=number[x]) //consider revising
                        {
                            target_count++;
                        }
                    }      
            
                   printf("%d people donated more than %d .", target_count, target_donation);
                }
        
        
                //Now to compute if the user selects option 5
                if(option==5)
                {
                    printf("What is the target donation?\n");
                    scanf("%d", &target_donation2);
            
                    for(x=lowest; x<=highest; x++)
                    {
                        if(number[x]==target_donation2) //consider revising
                        {
                            target_count2++;
                        }
                    }      
            
            
                    printf("%d people donated exactly $%d .\n", target_count2, target_donation2);
            
                }
        
        
        
                //Now to compute if the user selects option 6
                if(option==6)
                {
                    printf("What is the target donation?\n");
                    scanf("%d", &target_donation3);
            
                    for(x = 0; x < count; x++)
                    {
                        sum += number[x];
                    }
            
                    for(x=lowest; x<=highest; x++)
                    {
                        if(total_under < target_donation3)
                        {
                            total_under+= number[x];
                        }
                    }
            
                       percentage = (sum/total_under) * 100;
            
                    printf("Donations under $%d accounted for %.2lf percent of the funds raised",target_donation3, percentage);
                }
        
        }
        
        
        system("PAUSE");
        return 0;
    }

    So test.txt is a file with this written in it:
    10
    50
    25
    75
    2000
    30
    500
    800
    10
    25
    485

    where the output should be similar to this:
    Please enter the name of the data file.
    test.txt
    The data for 10 number of contributions has been read.

    Please make a choice from the following options:
    1) Calculate the average donation for a subset of the donations.
    2) Calculate the minimum donation for a subset of the donations.
    3) Calculate the maximum donation for a subset of the donations.
    4) Calculate the number of donations exceeding a target value.
    5) Calculate the number of donations of a particular dollar amount.
    6) Calculate what percentage of the donations (value wise) are under a target value.
    7) Quit
    1

    What is the low bound for your group (0-9)?
    3
    What is the high bound for your group (0-9)?
    6
    The average donation from person 3 to person 6 is $832.50.

    Please make a choice from the following options:
    1) Calculate the average donation for a subset of the donations.
    2) Calculate the minimum donation for a subset of the donations.
    3) Calculate the maximum donation for a subset of the donations.
    4) Calculate the number of donations exceeding a target value.
    5) Calculate the number of donations of a particular dollar amount.
    6) Calculate what percentage of the donations (value wise) are under a target value.
    7) Quit
    2

    What is the low bound for your group (0-9)?
    3
    What is the high bound for your group (0-9)?
    6
    The smallest donation from person 3 to person 6 is $30.

    Please make a choice from the following options:
    1) Calculate the average donation for a subset of the donations.
    2) Calculate the minimum donation for a subset of the donations.
    3) Calculate the maximum donation for a subset of the donations.
    4) Calculate the number of donations exceeding a target value.
    5) Calculate the number of donations of a particular dollar amount.
    6) Calculate what percentage of the donations (value wise) are under a target value.
    7) Quit
    3

    What is the low bound for your group (0-9)?
    3
    What is the high bound for your group (0-9)?
    6
    The largest donation from person 3 to person 6 is $2000.

    Please make a choice from the following options:
    1) Calculate the average donation for a subset of the donations.
    2) Calculate the minimum donation for a subset of the donations.
    3) Calculate the maximum donation for a subset of the donations.
    4) Calculate the number of donations exceeding a target value.
    5) Calculate the number of donations of a particular dollar amount.
    6) Calculate what percentage of the donations (value wise) are under a target value.
    7) Quit
    4

    What is the target donation?
    75
    4 people donated more than $75.

    Please make a choice from the following options:
    1) Calculate the average donation for a subset of the donations.
    2) Calculate the minimum donation for a subset of the donations.
    3) Calculate the maximum donation for a subset of the donations.
    4) Calculate the number of donations exceeding a target value.
    5) Calculate the number of donations of a particular dollar amount.
    6) Calculate what percentage of the donations (value wise) are under a target value.
    7) Quit
    5

    What is the target donation?
    25
    2 people donated exactly $25.

    Please make a choice from the following options:
    1) Calculate the average donation for a subset of the donations.
    2) Calculate the minimum donation for a subset of the donations.
    3) Calculate the maximum donation for a subset of the donations.
    4) Calculate the number of donations exceeding a target value.
    5) Calculate the number of donations of a particular dollar amount.
    6) Calculate what percentage of the donations (value wise) are under a target value.
    7) Quit
    6

    What is the target donation?
    500
    Donations under $500 accounted for 17.50 percent of the total funds raised.
    Can anyone help me as to why the file isn't executing properly? Thanks in advance.
    Last edited by bns1201; 10-17-2008 at 06:20 PM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. file i/o dilemma
    By adramalech in forum C Programming
    Replies: 27
    Last Post: 11-11-2008, 12:30 AM
  2. help on assignment (file i/o)
    By Longhorn9024 in forum C Programming
    Replies: 4
    Last Post: 03-07-2008, 02:08 AM
  3. True ASM vs. Fake ASM ????
    By DavidP in forum A Brief History of Cprogramming.com
    Replies: 7
    Last Post: 04-02-2003, 04:28 AM
  4. simulate Grep command in Unix using C
    By laxmi in forum C Programming
    Replies: 6
    Last Post: 05-10-2002, 04:10 PM
  5. loops and I/O file.
    By Unregistered in forum C++ Programming
    Replies: 3
    Last Post: 09-09-2001, 09:41 AM