Почему эта программа РАБОТАЕТ? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

У меня есть две структуры, с одинаковым кол-вом полей, но поля разного типа:
struct hat
{
    char s1[20], s2[20], s3[20] ;
} shapka;
 
typedef struct monopolies
{
    char name[40];
    int year;
    float capital;
 
}monopolies;
monopolies monopoly; //создаю тут структуру типа monopolies
Есть функция для обработки "шапки": ( если что, это считывание шапки таблицы из файла, но это не важно)
void Read_Shapka_File(FILE *f, struct hat *shapka) //как вы видите, отдаю в ф-ию указатель на структуру типа hat
{
    if (fscanf(f, "%s%s%s", shapka->s1, shapka->s2, shapka->s3)!=EOF)
    {
        printf("%-20s %15s %20s\n\n", shapka->s1, shapka->s2, shapka->s3);
    }
    else
    {
        exit(ERROR_READING_FILE);
    }
}
...И совершенно другая, отдельная ф-ия, в которую я отдаю указатель на вторую структуру.
void Job1_Two_Files(char* putInp, monopolies *monopoly)
В этой ф-ии я вызываю ф-ию Read_Shapka_File, но отдаю ей указатель на другую структуру, не ту, что положено:
Read_Shapka_File(inp, monopoly);
. Мало того что компилятор не ругается, но программа работает и выводит-таки эту "шапку". КАК??? Если это из-за указателей в обеих ф-иях, это не объясняет, почему нет конфликта типов. Скидываю программу, постарался удалить все, что не относится к данной проблеме

Решение задачи: «Почему эта программа РАБОТАЕТ?»

textual
Листинг программы
    if (inp=fopen(putInp, "r")==NULL)

Объяснение кода листинга программы

  1. Программа открывает файл с помощью функции fopen.
  2. Файл открывается в режиме чтения (r).
  3. Если файл не может быть открыт (в случае ошибки), программа выдает сообщение об ошибке и завершает выполнение.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы