| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с Dev c++ |
| Автор: HMLd 31.1.2007, 21:42 | ||
Такая проблема в Dev c++ 4.9.9.2.
Что это - баг?... Можно ли исправить?... В Borland всё нормально. |
| Автор: cardinal 31.1.2007, 21:56 |
А ты возьми в Borland'e функцию fprintf и замени ту, что сидит в DevCpp директории в каком-нибудь файле типа printf.c ... |
| Автор: HMLd 31.1.2007, 21:58 |
| Так не получится - мне на Dev'е республику писать... |
| Автор: cardinal 31.1.2007, 22:00 |
что что писать? |
| Автор: HMLd 31.1.2007, 22:04 |
| Республиканскую олимпиаду по информатике. А они почнму-то сказали, что в этом году будет не Borland c++ 5.02, a Dev c++ ((( |
| Автор: cardinal 31.1.2007, 22:11 |
| Так блин я же не говорю писать на Borland'e а говорю копирнуть оттуда часть тебе необходимую... Или не брать в голову и написать то, что надо в две строки. Может у DevC другой синтаксис аргументов fprintf. Ты ее нашел у Borland'a и DevC? Сравнил? |
| Автор: HMLd 31.1.2007, 22:19 |
| Дело в том, что вряд ли жюри даст добро на такое "изменение". А насчёт реализации - разве синтаксис fprintf не должен поддерживать стандарт языка?... Добавлено @ 22:21 Я бы не брал в голову - но вдруг там ещё таких багов приятных отыщу?.. |
| Автор: archimed7592 31.1.2007, 22:32 |
| если я не ошибаюсь, devcpp - только оболочка...компилируеться всё mingw (gcc)... |
| Автор: Anikmar 31.1.2007, 22:39 |
| А под отладчиком смотрели? Считывается переменная правильно? Чему равна b перед записью? |
| Автор: HMLd 31.1.2007, 23:06 |
| Anikmar, всё нормально, перед записью инициализируется нулями. |
| Автор: Anikmar 31.1.2007, 23:14 |
Походу я не врубился... Ошибка в том, что неправильно записывается b? А вы говорите, что перед записью инициализируется нулями... Либо я не понял... Если в выходной файл b должна записаться как 1000 чему она равна перед функцией записи? т.е. где локальная проблема: неправильно считывается или неправильно записывается? |
| Автор: V.A.KeRneL 31.1.2007, 23:19 | ||||
| HMLd, во-первых, мне непонятно как ты вообще это в Дэве скомпилил. У меня он ругается
уже на эти строччки:
, требуя занести их в тело функции main. А вообще, у тебя неправильный код, поэтому и не компилится. (Это, имхо, правильно.) И то, что «в Borland всё нормально», как ты говоришь, — скорее баг этого самого Borland'а, чем Dev-C++. Хотя абсолютно согласен, что Dev — самопальная фигня, состряпанная на коленке. Но, чтобы заметить твою ашипку, надо быть очень внимательным. И предыдущие ответы это подтверждают. Параметр "%lf" [f]printf'а соответствует типу double (который, [почти] всегда, — 8 char'ов), а не long double (который, обычно, — 12). Ну, а дальше, думаю понятно: передача [f]printf'у «плавающего» числа параметров через системный стек. Принтф берёт из стека столько байт, сколько описывает %-вые элементы строки формата. |
| Автор: HMLd 1.2.2007, 00:33 |
| V.A.KeRneL, 1) Код у меня компилится. Работатет с ошибками. 2) Указатели на файлы не в main(), т.к. они - глобальные. 3) Вы правы - надо быть очень внимательным: модификатор в коде не l (прописная), а L (строчная), l - да, соответствует double, но L - соответствует long double. В коде ошибок нет, In My Humble Opinion. P.S. Какая у Вас версия Дева? Добавлено @ 00:35 Anikmar, неправильно записывается - из кода ведь видно. |
| Автор: V.A.KeRneL 1.2.2007, 01:21 | ||||||||||
Да эт я понял. У меня не компилился. Ха, а то я не понял!
Вот это да, по существу. Извиняюсь, что-то я на тебя через-чур резко набросился. (Настроение такое...) Мне почему-то казалось, что "l" и "L" в данном контексте равнозначны. (Заглянул в книжку — оказалось нет.
Как более подробно версию самого Дэва (4.x.y.z) посмотреть, не знаю. ========================================================================================== Но проверить на самом деле на основании моего предыдущего поста оень легко:
Выдаёт:
Да, действительно, тупой Dev думает также как и я несколько десятков минут назад. |
| Автор: HMLd 1.2.2007, 01:25 |
| V.A.KeRneL, да ничего, я не в обиде) Просто самому неприятно, что на таком ***** заставляют писать... |
| Автор: V.A.KeRneL 1.2.2007, 01:38 |
| Угу, даже в МГУ! Линух, млин, поставить не могут!.. З.Ы. См. репу! )) |
| Автор: HMLd 1.2.2007, 02:05 |
| V.A.KeRneL, а нам предлагали под Линукс писать) |
| Автор: V.A.KeRneL 1.2.2007, 02:18 |
И чё, неужто отказался?!. З.Ы. Пометь тему решённой. |
| Автор: HMLd 1.2.2007, 02:25 |
| V.A.KeRneL, э... да) А что - не стоило?.. Просто я всю жизнь под окнами кодил, а под линухом нет - просто юзал его... |
| Автор: V.A.KeRneL 1.2.2007, 02:29 |
Эээ... Ну, вообще-то, да! |
| Автор: sergejzr 3.2.2007, 12:09 |
| Модератор: Название темы должно отражать ее суть! Правила форума: http://forum.vingrad.ruhttp://forum.vingrad.ru/act-SR/f-27.html |
| Автор: Pete 3.2.2007, 16:41 | ||
Вообще Dev очень не любит long'и. Попробуй, скажем, прочитать число 2^62 (%lld) и распечатать. Получится фигня)) Надо вставлять какой-то кривой маздайный %I64d...
Ага! Только сам не брезгуешь в нем писать! |
| Автор: V.A.KeRneL 3.2.2007, 17:35 |
Другого на соревнованиях, всё равно, не дают. Нам-то под Линукс писать не предлагали!.. |
| Автор: Pete 4.2.2007, 03:12 |
Пардон, есть Borland. Так что вперед... Ага, мгушники к маздаю приучают |
| Автор: HMLd 5.2.2007, 00:50 | ||||
| 2 sergejzr: I'm really sorry. Думал, что достаточно точно: т.е. именно про Дев. Всё же учту. Спасибо. А вот ещё интереснее((
Сложная программма, да?... Однако результат таковой:
Блин... Что делать?... Может я неправильно юзаю fprintf ? сейчас cout попробую ( |
| Автор: archimed7592 5.2.2007, 01:31 |
| HMLd, я не припомню олимпиадной задачи в которой не хватало бы точности double...может не стоит так напрягаться из-за этого? тем более, если учесть, что олимпиады такого уровня достаточно хорошо продумываются и задачи там рассчитаны на то, что они будут решаемы на любом из предлагаемых языков...а в том же васике 10-байтных вещественных отродясь не было...советую сконцентрироваться на других аспектах подготовки к олимпиаде тем более, что если ты докажешь жюри, что по стандарту должно быть "так", а получается "вот так", то сможешь отапеллировать недостающие баллы... |
| Автор: HMLd 5.2.2007, 01:43 |
| Да, может ты прав. Но приятнее было бы, если бы можно было подольше не обращаться к длинной арифметике. Какой там диапозон у long double? Вот так вот... |
| Автор: Pete 5.2.2007, 20:28 |
| HMLd, ключевое слово register не играет никакой роли при использовании современных компиляторов. Добавлено @ 20:31 Все правильно. Читай выше, dev (вернее поставляемый с ним gcc) криво обрабатывает long. И long long. Наши однополчане сами погорели на олимпиаде на такой пакости. Просто long double бывает, действительно, довольно редко необходим, а вот без long long порой не обойтись... |
| Автор: HMLd 6.2.2007, 01:45 |
| 2 Pete, про register - правда? Кому интересно - кинул вопрос на форум разработчиков Dev'a. Ответили. http://sourceforge.net/forum/forum.php?thread_id=1665046&forum_id=48211 Добавлено @ 01:49 V.A.KeRneL, спасибо за репутацию ))) |
| Автор: Pete 12.2.2007, 14:09 | ||
К гадалке не ходи... (Ссылаюсь на http://www.okc.ru:8080/okc/publish/imag.nsf/book/5-9579-0059-1?OpenDocument&env=11) Добавлено @ 14:17
Это весь ответ? |
| Автор: HMLd 13.2.2007, 00:57 | ||
| 2 Pete, ага... Но я там поискал - так они прямо и говорят что мол, не юзайте это с лонгами. Ещё нашёл там же что-то типа
Надо попробовать. И разобраться. |
| Автор: V.A.KeRneL 13.2.2007, 07:32 | ||
|
| Автор: HMLd 13.2.2007, 13:10 |
| V.A.KeRneL, Неа, нельзя) |