![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Я написал собственную функцию открытия файла взамен стандартной fopen. Вот ее код:
Но выдается ошибка, что в скобках switch должно быть значение типа "integral" (это int, что ли?). И еще ругается на fopen на второй параметр (опять лопочет о каком-то преобразовании типов). Прошу исправить ошибки! |
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
switch не работает со строками
-------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Так то правильно, только смысла в этой функции? Во первых она никогда не возвратит true, а во вторых ты потеряешь указатель на FILE, так как это локальная переменная.
|
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Блин, опять не дописал...
Теперь true возвратит. Про локалку действительно проблема... Ее можно сделать глобальной (для этого, вроде, extern используется, да?). Тогда вот так будет, да?
|
||||
|
|||||
| sergejzr |
|
||||||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
static, не extern используется Я бы на твоём месте делал так:
И проверять потом:
Ещё вариант:
И вызывать:
Конечно не в стмле, но всё лучше, чем static.. Это сообщение отредактировал(а) sergej.z - 7.8.2005, 15:27 |
||||||||||
|
|||||||||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Я, наверно, воспользуюсь вторым вашим вариантом, но мне непонятна вот эта строчка:
Как это и амперсанд, и указатель на одну и ту же переменную, да и зачем это? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Первый вариант - самый правильный.
Таким образом передаётся адрес указателя. Вызываем функцию с указателем, а в ней на самом деле попадает его адрес. Иначе значение указателя будет изменено только локально. |
|||
|
||||
| mr.Anderson |
|
||||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Ну, в принципе, можно и первый вариант...
Мне больше нравится второй, так как там тип bool у функции сохранен. А мне что-то очень уж им захотелось попользоваться... Добавлено @ 15:24 Да, и еще мне непонятен ваш первый вариант. Интересное условие: если файл не открыт, то возвращается указатель на файл, а если открыт, то NULL. Это вот тут:
Я так полагаю, должно быть вот эдак:
|
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Да, конечно. Это я смудрил А второй вариант нехорош тем, что изменяет передаваемый аргумент, а это ооочень плохой стиль программирования. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Но ведь при работе с файлом так и так надо его менять. Хоть через функцию, хоть как. Для того его и открываем, верно ли?
Ну, вот, теперь не знаю, что выбрать. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
файл то да, но представь себе, ты вызываешь функцию, передаёшь в неё свои переменные, а после отработки функции у этих переменных меняются значения
При хорошем стиле передаваемые аргументы не меняются в функции. Передаёшь в неё значения - на выходе получаешь новое значение. Сами значения при этом не меняются. Добавлено @ 15:31 Зря я конечно второй вариант написал |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Ладно, тогда возьму первый вариант. Спасибо!
Добавлено @ 15:33 Да уж, действительно зря. Такой он красивый... Теперь он у меня постоянно в голове будет сидеть. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
sergej.z, проблема. Ну, открыл я этой функцией (первый вариант
|
|||
|
||||
| cardinal |
|
|||
![]() Инженер ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6003 Регистрация: 26.3.2002 Где: Германия Репутация: 2 Всего: 99 |
Почитай например тут:
http://ibs.howstuffworks.com/ibs/des/c18.htm Добавлено @ 21:24 А также тут Побайтное считывание файла Обработка файла (как пример .bmp) А еще поиском попользуйся... -------------------- Немецкая оппозиция потребовала упростить натурализацию иммигрантов В моем блоге: Разные истории из жизни в Германии "Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |