Example: goto

The following example, for Windows platforms, opens a file and reads it into a buffer. If file errors occur during the process, goto escapes the enclosing loop to code which prints an error message and exits the function.

To ensure the goto statement is executed, make sure the file c:\xyzpqi.txt does not exist. This causes fopen to return NULL and invoke the goto statement. To see the jump clearly, step through the program in VuGen by pressing the F10 key.

#include <stdio.h>
    int count, total = 0;
    char buffer[1000];
    FILE* file_stream;
    char * filename = "c:\\xyzpqi.txt";
    // Open the file with read access 
    if ((file_stream = fopen(filename, "r")) == NULL)
        goto file_error;
    // Read until end of file 
    while (!feof(file_stream)) {
   // Read 1000 bytes while maintaining a running count 
        count = fread(buffer, sizeof(char), 1000, file_stream);
        lr_output_message ("%3d read", count);
   // Check for file I/O errors
        if (ferror(file_stream)) 
            goto file_error;
  // add up actual bytes read 
        total += count; 
    }
  // Display final total 
    lr_output_message ("Total number of bytes read = %d", total);
 // Close the file stream 
    if (!fclose(file_stream)) 
        return 0;
        file_error:
        lr_error_message ("Error in file %s", filename);
                Output:
Action.c(35): Error -17999 : Error in file c:\xyzpqi.txt