Graceful Degradation
C
Hard
4 views
Problem Description
Create a program that loads data using the primary method. If it fails, create a fallback method. Multiple levels of error handling.
Official Solution
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef enum {
LOAD_SUCCESS = 0,
LOAD_ERR_PRIMARY_FAILED = -1,
LOAD_ERR_FALLBACK_FAILED = -2,
LOAD_ERR_INVALID_INPUT = -3
} LoadStatus;
/* Primary load method (preferred source) */
LoadStatus load_primary(const char *path, char *buffer, size_t size)
{
FILE *fp;
if (!path || !buffer || size == 0) {
return LOAD_ERR_INVALID_INPUT;
}
fp = fopen(path, "r");
if (!fp) {
return LOAD_ERR_PRIMARY_FAILED;
}
if (!fgets(buffer, size, fp)) {
fclose(fp);
return LOAD_ERR_PRIMARY_FAILED;
}
fclose(fp);
return LOAD_SUCCESS;
}
/* Fallback load method (secondary source) */
LoadStatus load_fallback(char *buffer, size_t size)
{
if (!buffer || size == 0) {
return LOAD_ERR_INVALID_INPUT;
}
/* Example fallback: built-in default data */
strncpy(buffer, "DEFAULT_DATA", size - 1);
buffer[size - 1] = '