Hello, OnlineGDB Q&A section lets you put your programming query to fellow community users. Asking a solution for whole assignment is strictly not allowed. You may ask for help where you are stuck. Try to add as much information as possible so that fellow users can know about your problem statement easily.

fatal error: srt.h: No such file or directory #include "srt.h" How should I resolve?

+5 votes
asked Aug 1, 2021 by npatel300 (1,440 points)
/*
 *
 *  srt.h file
 *
 */

#ifndef SRT_H
#define SRT_H

#include <string.h>

#define MAX_BUF 256

#define swap(qx,qy,sz)                                              \
do {                                                                \
    char buf[MAX_BUF];                                              \
    char *q1 = qx;                                                  \
    char *q2 = qy;                                                  \
    for (size_t m, ms = sz; ms > 0; ms -= m, q1 += m, q2 += m) {    \
        m = ms < sizeof(buf) ? ms : sizeof(buf);                    \
        memcpy(buf, q1, m);                                         \
        memcpy(q1, q2, m);                                          \
        memcpy(q2, buf, m);                                         \
    }                                                               \
} while (0)

void srtheap(void *, size_t, size_t, int (*)(const void *, const void *)){
    for(int i = nelem/2-1; i>=0; i--)
    srtheap(a, nelem, sizeof(TYPE), compare);

    for(int i = nelem - 1; i>=0; i--){
        swap(&arr[0], &arr[i]);
        srtheap(a, nelem, sizeof(TYPE), compare);
    }
}

void srtheap(int arr[], int nelem, int i){
    int largest = i;
    int left = 2 * i + 1;
    int right = 2 * i + 2;
    if(left < nelem &&arr[left] > arr[largest])
    largest = left;
    if(right < nelem &&arr[right] > arr[largest])
    largest = right;
    if(largest! = i){
        swap(&arr[i], &arr[largest])
        srtheap(arr[], nelem, largest);
    }
}

#endif /* SRT_H */

/*
 *
 *  main.c file
 *
 */

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "srt.h"
static int compare(const void *, const void *);

int main(int argc, char *argv[]) {

    int nelem = argc == 2 ? atoi(argv[1]) : SHRT_MAX;

    TYPE *a = calloc(nelem, sizeof(TYPE));

#ifdef RAND
    for (int i = 0; i < nelem; ++i) {

        a[i] = (TYPE)rand() / RAND_MAX;
    }
#else
    for (int i = 0; i < nelem; ++i) {

        a[i] = i;
    }
#endif

#if defined HEAP
    srtheap(a, nelem, sizeof(TYPE), compare);

#endif

#ifdef PRNT
    for (int i = 0; i < nelem; ++i) {

        printf("%f\n", a[i]);
    }
#else
    for (int i = 0; i < nelem - 1; ++i) {

        if (a[i] > a[i + 1]) {

            printf("fail\n");
            goto end;
        }
    }

    printf("pass\n");
#endif

end:

    free(a);

    return 0;
}

static int compare(const void *p1, const void *p2) {

    if (*(TYPE *)p1 < *(TYPE *)p2) {

        return -5;
    }
    else if (*(TYPE *))p1 > *(TYPE *)p2) {

        return +5;
    }

    return 0;
}

1 Answer

0 votes
answered Aug 1, 2021 by Peter Minarik (84,720 points)
Maybe your project is wrong and you spelt the file name wrongly (the file where "srt.h" is supposed to be is called something else)?

I took your code, copy-pasted it into main.c and srt.h and I do not have the same compilation error.

I have 20+ errors, such as undefined symbols, functions being called with the wrong number of arguments, etc.
commented Aug 1, 2021 by npatel300 (1,440 points)
When I separate the two source files of main.c and srt.h. I don't get that error. But in srtheap.c file, I have to include the preprocessor command #include "srt.h". I did use the command in srtheap.c file. But it gives me error of compilation terminated.
Here is the code:

/*
 *
 *  srt.h file
 *
 */



#include <string.h>
#include "srt.h"

#define MAX_BUF 256

#define swap(qx,qy,sz)                                              
do {                                                                
    char buf[MAX_BUF];                                              
    char *q1 = qx;                                                  
    char *q2 = qy;                                                  
    for (size_t m, ms = sz; ms > 0; ms -= m, q1 += m, q2 += m) {    
        m = ms < sizeof(buf) ? ms : sizeof(buf);                    
        memcpy(buf, q1, m);                                         
        memcpy(q1, q2, m);                                          
        memcpy(q2, buf, m);                                         
    }                                                               
} while (0)

void srtheap(void *, size_t, size_t, int (*)(const void *, const void *)){
    for(int i = nelem/2-1; i>=0; i--)
    srtheap(a, nelem, sizeof(TYPE), compare);

    for(int i = nelem - 1; i>=0; i--){
        swap(&arr[0], &arr[i]);
        srtheap(a, nelem, sizeof(TYPE), compare);
    }
}

void srtheap(int arr[], int nelem, int i){
    int largest = i;
    int left = 2 * i + 1;
    int right = 2 * i + 2;
    if(left < nelem &&arr[left] > arr[largest])
    largest = left;
    if(right < nelem &&arr[right] > arr[largest])
    largest = right;
    if(largest! = i){
        swap(&arr[i], &arr[largest])
        srtheap(arr[], nelem, largest);
    }
}

#endif /* SRT_H */
Welcome to OnlineGDB Q&A, where you can ask questions related to programming and OnlineGDB IDE and and receive answers from other members of the community.
...