Почему эта программа РАБОТАЕТ? - C (СИ)
Формулировка задачи:
У меня есть две структуры, с одинаковым кол-вом полей, но поля разного типа:
Есть функция для обработки "шапки": ( если что, это считывание шапки таблицы из файла, но это не важно)
...И совершенно другая, отдельная ф-ия, в которую я отдаю указатель на вторую структуру.
В этой ф-ии я вызываю ф-ию Read_Shapka_File, но отдаю ей указатель на другую структуру, не ту, что положено:
.
Мало того что компилятор не ругается, но программа работает и выводит-таки эту "шапку". КАК???
Если это из-за указателей в обеих ф-иях, это не объясняет, почему нет конфликта типов.
Скидываю программу, постарался удалить все, что не относится к данной проблеме
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(inp, monopoly);
Решение задачи: «Почему эта программа РАБОТАЕТ?»
textual
Листинг программы
if (inp=fopen(putInp, "r")==NULL)
Объяснение кода листинга программы
- Программа открывает файл с помощью функции fopen.
- Файл открывается в режиме чтения (
r
). - Если файл не может быть открыт (в случае ошибки), программа выдает сообщение об ошибке и завершает выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д