Почему у меня начало выдавать ошибку на все строки со структурами

У меня был файл с полностью рабочим кодом, и я работал в другом файле. И в какой-то момент в обоих этих файлах код начал ругаться на все структуры. Сперва Я удалил новый файл(там мало чего было сделано), но это не помогло. Файлы друг с другом не взаимодействуют. В целом у меня VS выдаёт ошибку только на те строки, где есть обращения к структурам. Вот код где

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <stdio.h>
#define MAX_SIZE_OF_MATRIX 3
#define MAX_SIZE_OF_VAL 4
typedef struct STR {
    int Val;
    int Row;
    STR* Next;
} STR;
typedef struct ListSTR {
    STR* row;
    struct ListSTR* Next;
} ListSTR;
void Add(STR** point, int Val, int Row) {
    STR* t = malloc(sizeof(STR));
    t->Row = Row;
    t->Val = Val;
    t->Next = NULL;
    STR** p = point;
    if (*p)
        for (p = &(*p)->Next; *p; p = &(*p)->Next);
    *p = t;
}
void AddToIndex(ListSTR** matrix, int index, int Val, int Row) {
    ListSTR** result = matrix;
    for (int i = 1; i <= index; i++) {
        if (*result) {
            result = &(*result)->Next;
        }
        else {
            printf("Error");
            exit(1);
        }
    }
    Add(&((*result)->row), Val, Row);
}
void clean(ListSTR* matrix, int ROWS) {
    ListSTR* matrixTemp;
    for (int i = 0; i < ROWS; i++) {
        matrixTemp = matrix;
        STR* point = matrixTemp->row;
        STR* pTemp;
        while (point) {
            pTemp = point;
            if (point->Next) {
                point = point->Next;
            }
            else {
                free(pTemp);
                break;
            }
            free(pTemp);
        }
        if (matrix->Next) {
            matrix = matrix->Next;
        }
        else {
            free(matrixTemp);
            break;
        }
        free(matrixTemp);
    }
}
int isNum(char c) {
    switch (c) {
    case '1':
        return 1;
    case '2':
        return 1;
    case '3':
        return 1;
    case '4':
        return 1;
    case '5':
        return 1;
    case '6':
        return 1;
    case '7':
        return 1;
    case '8':
        return 1;
    case '9':
        return 1;
    case '0':
        return 1;
    default:
        return 0;
    }
}
int isWhitespace(char c) {
    switch (c) {
    case' ':
        return 1;
    case'\n':
        return 1;
    case'\0':
        return 1;
    default:
        return 0;
    }
}
void GetRowsAndColums(char* filename, int* ROWS, int* COLUMNS) {
    FILE* fp = fopen(filename, "r");
    char rows[MAX_SIZE_OF_MATRIX];
    char c;
    while (isWhitespace(c = getc(fp))) {}
    int i = 0;
    while (1) {
        i = 0;
        if (isNum(c)) {
            rows[i++] = c; rows[i] = 0;
        }
        else if (isWhitespace(c)) {
            if (c == '\n') {
                printf("Error");
                exit(1);
            }
            *ROWS = strtol(rows, NULL, 10);
            break;
        }
        else {
            printf("Error");
            exit(1);
        }
        c = getc(fp);
    }
    while (isWhitespace(c = getc(fp))) {}
    char column[MAX_SIZE_OF_MATRIX];
    i = 0;
    while (1) {
        i = 0;
        if (isNum(c)) {
            column[i++] = c;  column[i] = 0;
        }
        else if (isWhitespace(c)) {
            *COLUMNS = strtol(column, NULL, 10);
            break;
        }
        else {
            printf("Error");
            exit(1);
        }
        c = getc(fp);
    }
    fclose(fp);
}
void TestAdd(ListSTR* matrix) {
    for (int i = 0; i < 3; i++) {
        matrix->row = (STR*)malloc(sizeof(STR));
        matrix->row->Row = i;
        matrix->row->Val = i + 1;
        matrix->row->Next = NULL;
        matrix = matrix->Next;
    }
}
void printMatrix(ListSTR* matrix, int ROWS, int COLUMNS) {
    STR* point;
    for (int i = 0; i < ROWS; i++) {
        point = matrix->row;
        int lastRow = -1;
        for (int j = 0; j < COLUMNS; j++) {
            if (point == NULL) {
                for (int k = 1; k < COLUMNS - lastRow; k++) {
                    printf("0 ");
                }
                break;
            }
            int Val = point->Val;
            int Row = point->Row;
            if (Row == 0) {
                printf("%d ", Val);
                lastRow = 0;
            }
            else if (Row >= COLUMNS) {
                printf("Error");
                exit(1);
            }
            else if (Row > lastRow) {
                for (int k = lastRow + 1; k < Row; k++) {
                    printf("0 ");
                }
                printf("%d ", Val);
                lastRow = Row;
            }
            else if (Row <= lastRow) {
                printf("Error");
                exit(1);
            }
            else {
                printf("%d ", Val);
            }
            point = point->Next;
        }
        printf("\n");
        matrix = matrix->Next;
    }
}
void Initialize(ListSTR* matrix, int ROWS) {
    if (ROWS == 1) {
        matrix->row = NULL;
        return;
    }
    else if (ROWS < 1) {
        printf("Error");
        exit(0);
    }
    for (int i = 0; i < ROWS; i++) {
        matrix->row = NULL;
        matrix->Next = malloc(sizeof(ListSTR));
        matrix = matrix->Next;
    }
    free(matrix);
}
void ReadMatrix(ListSTR* matrix, int ROWS, int COLUMNS, char* filename) {
    FILE* fp = fopen(filename, "r");
    char c;
    int count = 1;
    while (c = getc(fp) != '\n') {}
    while (1) {
        while (1) {
            int isNULL = 0;
            char val[MAX_SIZE_OF_VAL];
            while (isWhitespace(c = getc(fp))) {}
            int i = 0;
            int value;
            int row;
            while (1) {
                if (c == '-' && i == 0) {
                    val[i++] = c; val[i] = 0;
                }
                else if (isNum(c)) {
                    val[i++] = c; val[i] = 0;
                }
                else if (isWhitespace(c)) {
                    if (c == '\n') {
                        printf("Error");
                        exit(1);
                    }
                    value = strtol(val, NULL, 10);
                    break;
                }
                else if (c == 'N') {
                    if (matrix->row != NULL) {
                        printf("Error");
                        exit(1);
                    }
                    isNULL = 1;
                    break;
                }
                else {
                    printf("Error");
                    exit(1);
                }
                c = getc(fp);
            }
            while (isWhitespace(c = getc(fp))) {}
            char rows[MAX_SIZE_OF_MATRIX];
            i = 0;
            while (1) {
                if (isNULL) {
                    if (c == 'U') {
                        for (int i = 0; i < 2; i++) {
                            c = getc(fp);
                            if (c != 'L') {
                                printf("Error");
                                exit(1);
                            }
                        }
                        break;
                    }
                }
                if (isNum(c)) {
                    rows[i++] = c; rows[i] = 0;
                }
                else if (isWhitespace(c)) {
                    row = strtol(rows, NULL, 10);
                    if (row >= ROWS) {
                        printf("Error");
                        exit(1);
                    }
                    break;
                }
                else if (c == EOF) {
                    row = strtol(rows, NULL, 10);
                    if (row >= ROWS) {
                        printf("Error");
                        exit(1);
                    }
                    break;
                }
                else {
                    printf("Error");
                    exit(1);
                }
                c = getc(fp);
            }
            if (!isNULL) {
                Add(&(matrix->row), value, row);
            }
            else {
                break;
            }
            if (c == '\n' || c == EOF) {
                break;
            }
        }
        count++;
        if (count >= ROWS) {
            break;
        }
        matrix = matrix->Next;
    }
    fclose(fp);
}
void Transpose(ListSTR* matrix, ListSTR* result, int ROWS, int COLUMNS) {
    for (int i = 0; i < ROWS; i++) {
        if (matrix->row == NULL) {
            if (i < ROWS) {
                matrix = matrix->Next;
            }
            continue;
        }
        STR* point = matrix->row;
        while (1) {
            AddToIndex(&result, point->Row, point->Val, i);
            if (point->Next != NULL) {
                point = point->Next;
            }
            else {
                break;
            }
        }
        if (i < ROWS) {
            matrix = matrix->Next;
        }
    }
}
int Trans() {
    setlocale(LC_ALL, "Rus");
    int ROWS, COLUMNS;
    char* file = "Text.txt";
    GetRowsAndColums(file, &ROWS, &COLUMNS);
    ListSTR* matrix = malloc(sizeof(ListSTR));
    Initialize(matrix, ROWS);
    ListSTR* result = malloc(sizeof(ListSTR));
    Initialize(result, COLUMNS);
    ReadMatrix(matrix, ROWS, COLUMNS, file);
    printf("Матрица \n");
    printMatrix(matrix, ROWS, COLUMNS);
    Transpose(matrix, result, ROWS, COLUMNS);
    printf("Матрица транспонированная \n");
    printMatrix(result, COLUMNS, ROWS);
    clean(matrix, ROWS); clean(result, COLUMNS);
    return 0;
}

Скрин с частью ошибок Скрин с частью ошибок


Ответы (1 шт):

Автор решения: Harry
typedef struct STR {
    int Val;
    int Row;
    struct STR* Next;
} STR;

Обратите внимание на пропущенное вами struct.

→ Ссылка