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

  • Thread starter Thread starter sh4rif
  • Start date Start date
  • Tags Tags
    Code Value
AI Thread Summary
The discussion revolves around improving a C program that reads a sequence of positive integers from a text file, terminating with a sentinel value of -1. The user, Usman, seeks assistance to enhance their code, which currently hardcodes the sentinel value and has some bugs. Key issues identified include the uninitialized variable 'numbers', which leads to undefined behavior in the while loop, and the lack of error checking for the 'fscanf' function, which could result in unhandled file read errors. Additionally, it is recommended to initialize the 'num' and 'total' variables to zero to avoid garbage values, especially if they were declared locally. The discussion emphasizes the importance of proper initialization and error handling in C programming for robust code.
sh4rif
Messages
4
Reaction score
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();
}
 
Technology news on Phys.org
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.
 
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?
 
thanks guys i know i have a bug in my code i can't 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
 
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.
 
Thread 'Star maps using Blender'
Blender just recently dropped a new version, 4.5(with 5.0 on the horizon), and within it was a new feature for which I immediately thought of a use for. The new feature was a .csv importer for Geometry nodes. Geometry nodes are a method of modelling that uses a node tree to create 3D models which offers more flexibility than straight modeling does. The .csv importer node allows you to bring in a .csv file and use the data in it to control aspects of your model. So for example, if you...
I tried a web search "the loss of programming ", and found an article saying that all aspects of writing, developing, and testing software programs will one day all be handled through artificial intelligence. One must wonder then, who is responsible. WHO is responsible for any problems, bugs, deficiencies, or whatever malfunctions which the programs make their users endure? Things may work wrong however the "wrong" happens. AI needs to fix the problems for the users. Any way to...

Similar threads

Back
Top