Sentinel value how to correct my code to make it more efficient

  • Thread starter sh4rif
  • Start date
  • #1
sh4rif
4
0
Hello to all

I have been given a task in "C" environment ..... to read a text file with a sequence of positive integers the sequence should be terminated with a sentinel value of -1

Values in text file is : 6 9 17 4 12 8 7 -1

We have to read the integers from text file, display the integers, total, average. the value -1is a sentinel value and is not part of the sequence.

I’ve created a code this works fine but I want a better code then this I hard quoted -1 could anyone please help me to improve my code please.

thanks once again
Usman
below is my code

Code:
#include <stdio.h>

char filename[] = "C:\\numbers.txt";

int numbers, total, num;
float average;

FILE *fp;

main()
{
      if((fp = fopen(filename, "r")) == NULL)
           printf("\n\n\t\t\tError opening file.");
      else
      {
           printf("\n\n\t\t");
           
           while(numbers>=0){
                fscanf(fp, "%d", &numbers);
                
                if(numbers != -1)
                {
                     printf("%4d", numbers);
                     total = total + numbers;
                     num++;
                }
       
           }
           average = (float) total/num;
           printf("\n\n\t\tTotal is %6d", total);
           printf("\n\n\t\tAverage is %7.2f", average);
      }
      getchar();
}
 

Answers and Replies

  • #2
36,216
8,199
Your program has a bug. Your while loop checks to see if numbers >= 0, but the first time through the loop, numbers is undefined. Better practice would be to initialize it to a known value such as 1.

I'll take a closer look at your code later.
 
  • #3
caffenta
143
0
It has another bug, not as critical as the one stated above, but still a very bad practice:

you're not checking the return value of fscanf. Don't assume that things went ok. What if the end-of-file is reached? What if there is a file error? What if one of the numbers is not actually a number?
 
  • #4
sh4rif
4
0
thanks guys i know i have a bug in my code i cant think of anything how to check do you have any tips to sort this out?.... I would really apperciate any help.... thanks one more time

take care bye
 
  • #5
36,216
8,199
See posts #2 and #3.

In addition to what was already mentioned, you should explicitly initialize num and total to 0. You might not realize it, but those variables are automatically initialized to 0 by virtue of their being global variables. If you had declared those variables inside your main function, you would be getting garbage results.
 

Suggested for: Sentinel value how to correct my code to make it more efficient

  • Last Post
Replies
4
Views
2K
  • Last Post
Replies
3
Views
2K
  • Last Post
Replies
9
Views
2K
  • Last Post
Replies
4
Views
825
  • Last Post
Replies
5
Views
2K
  • Last Post
Replies
20
Views
4K
  • Last Post
Replies
3
Views
4K
  • Last Post
Replies
3
Views
3K
  • Last Post
Replies
2
Views
715
Replies
7
Views
7K
Top