Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Dev c++, Блин... 
V
    Опции темы
HMLd
Дата 31.1.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 27.6.2006
Где: Polska

Репутация: 1
Всего: 0



Такая проблема в Dev c++ 4.9.9.2.
Код

#include <stdio.h>

FILE* in = fopen("input.txt", "r");
FILE* out = fopen("output.txt", "w");

int main()
{
    long double a = 0;
    long double b = 0;
    fscanf(in, "%Lf%Lf", &a, &b);
    fprintf(out, "%Lf", a);
    fprintf(out, "\n%Lf", b);

    _fcloseall();
    return 0;
}

/*
input.txt:
5.000001
1000.0

output.txt:
5.000001
1000.0 */

//---------------------------------------

#include <stdio.h>

FILE* in = fopen("input.txt", "r");
FILE* out = fopen("output.txt", "w");

int main()
{
    long double a = 0;
    long double b = 0;
    fscanf(in, "%Lf%Lf", &a, &b);
    fprintf(out, "%Lf\n%Lf", a, b); // Почему здесь надо 2 функции?..

    _fcloseall();
    return 0;
}

/*
input.txt:
5.000001
1000.0

output.txt:
5.000001
0.000000
*/


Что это - баг?... Можно ли исправить?... В Borland всё нормально.
PM MAIL   Вверх
cardinal
Дата 31.1.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата(HMLd @  31.1.2007,  19:42 Найти цитируемый пост)
В Borland всё нормально. 

А ты возьми в Borland'e функцию fprintf и замени ту, что сидит в DevCpp директории в каком-нибудь файле типа printf.c ...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
HMLd
Дата 31.1.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 27.6.2006
Где: Polska

Репутация: 1
Всего: 0



Так не получится - мне на Dev'е республику писать...
PM MAIL   Вверх
cardinal
Дата 31.1.2007, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата(HMLd @  31.1.2007,  19:58 Найти цитируемый пост)
мне на Dev'е республику писать... 

что что писать?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
HMLd
Дата 31.1.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 27.6.2006
Где: Polska

Репутация: 1
Всего: 0



Республиканскую олимпиаду по информатике. А они почнму-то сказали, что в этом году будет не Borland c++ 5.02, a Dev c++ (((
PM MAIL   Вверх
cardinal
Дата 31.1.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Так блин я же не говорю писать на Borland'e а говорю копирнуть оттуда часть тебе необходимую... Или не брать в голову и написать то, что надо в две строки. Может у DevC другой синтаксис аргументов fprintf. Ты ее нашел у Borland'a и DevC? Сравнил?


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
HMLd
Дата 31.1.2007, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 27.6.2006
Где: Polska

Репутация: 1
Всего: 0



Дело в том, что вряд ли жюри даст добро на такое "изменение". А насчёт реализации - разве синтаксис fprintf не должен поддерживать стандарт языка?...

Добавлено @ 22:21 
Я бы не брал в голову - но вдруг там ещё таких багов приятных отыщу?.. 
PM MAIL   Вверх
archimed7592
Дата 31.1.2007, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



если я не ошибаюсь, devcpp - только оболочка...компилируеться всё mingw (gcc)...


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
cardinal
Дата 31.1.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 2
Всего: 99



Цитата(HMLd @  31.1.2007,  20:19 Найти цитируемый пост)
А насчёт реализации - разве синтаксис fprintf не должен поддерживать стандарт языка?

А ты изучи этот вопрос и если какие проблемы с комиссией, то так и скажешь - функция fprintf не соответсвует ANSI C в DevC.
Цитата(HMLd @  31.1.2007,  20:19 Найти цитируемый пост)
но вдруг там ещё таких багов приятных отыщу?

И что? Раз условия олимпиады такие, то ничего не поделаешь. А вообще о DevC я уже писал:
http://forum.vingrad.ru/index.php?showtopi...st&p=923319
Цитата(HMLd @  31.1.2007,  20:04 Найти цитируемый пост)
А они почнму-то сказали, что в этом году будет не Borland c++ 5.02, a Dev c++ ((( 

Потому, что "For free".

Добавлено @ 22:34 
Цитата(archimed7592 @  31.1.2007,  20:32 Найти цитируемый пост)
если я не ошибаюсь, devcpp - только оболочка...компилируеться всё mingw (gcc)... 

Это так, но ясно, что речь идет именно о компиляторе и примочках...


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Anikmar
Дата 31.1.2007, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



А под отладчиком смотрели? Считывается переменная правильно? Чему равна b перед записью?
PM MAIL ICQ   Вверх
HMLd
Дата 31.1.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 27.6.2006
Где: Polska

Репутация: 1
Всего: 0



Anikmar, всё нормально, перед записью инициализируется нулями.
PM MAIL   Вверх
Anikmar
Дата 31.1.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(HMLd @  31.1.2007,  23:06 Найти цитируемый пост)
Anikmar, всё нормально, перед записью инициализируется нулями. 

Походу я не врубился... Ошибка в том, что неправильно записывается b?
А вы говорите, что перед записью инициализируется нулями...

Либо я не понял...

Если в выходной файл b должна записаться как 1000 чему она равна перед функцией записи? т.е. где локальная проблема: неправильно считывается или неправильно записывается?
PM MAIL ICQ   Вверх
V.A.KeRneL
Дата 31.1.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



HMLd, во-первых, мне непонятно как ты вообще это в Дэве скомпилил.
У меня он ругается 
Код

1.c:2: initializer element is not constant
1.c:3: initializer element is not constant

уже на эти строччки: 
Код

FILE* in = fopen("input.txt", "r");
FILE* out = fopen("output.txt", "w");

, требуя занести их в тело функции main.

А вообще, у тебя неправильный код, поэтому и не компилится. (Это, имхо, правильно.) И то, что «в Borland всё нормально», как ты говоришь, — скорее баг этого самого Borland'а, чем Dev-C++. Хотя абсолютно согласен, что Dev — самопальная фигня, состряпанная на коленке.

Но, чтобы заметить твою ашипку, надо быть очень внимательным. И предыдущие ответы это подтверждают. smile 
Параметр "%lf" [f]printf'а соответствует типу double (который, [почти] всегда, — 8 char'ов), а не long double (который, обычно, — 12).

Ну, а дальше, думаю понятно: передача [f]printf'у «плавающего» числа параметров через системный стек. Принтф берёт из стека столько байт, сколько описывает %-вые элементы строки формата.


Это сообщение отредактировал(а) V.A.KeRneL - 31.1.2007, 23:28


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
HMLd
Дата 1.2.2007, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 27.6.2006
Где: Polska

Репутация: 1
Всего: 0



V.A.KeRneL, 
1) Код у меня компилится. Работатет с ошибками. 
2) Указатели на файлы не в main(), т.к. они - глобальные.
3) Вы правы - надо быть очень внимательным: модификатор в коде не l (прописная), а L (строчная), l - да, соответствует double, но L - соответствует long double. В коде ошибок нет, In My Humble Opinion.  smile 

P.S. Какая у Вас версия Дева?

Добавлено @ 00:35 
Anikmar, неправильно записывается - из кода ведь видно.
PM MAIL   Вверх
V.A.KeRneL
  Дата 1.2.2007, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vadim A. Kazantsev
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 3.12.2006
Где: Moscow, Russia

Репутация: 1
Всего: 14



Цитата(HMLd @  1.2.2007, 00:33 Найти цитируемый пост)

1) Код у меня компилится. Работатет с ошибками.

Да эт я понял. У меня не компилился.

Цитата(HMLd @  1.2.2007, 00:33 Найти цитируемый пост)

2) Указатели на файлы не в main(), т.к. они - глобальные.

Ха, а то я не понял! smile Занёс в мэйн, чтоб компилилось.

Цитата(HMLd @  1.2.2007, 00:33 Найти цитируемый пост)

3) Вы правы - надо быть очень внимательным: модификатор в коде не l (прописная), а L (строчная), l - да, соответствует double, но L - соответствует long double. В коде ошибок нет, In My Humble Opinion.  smile 

Вот это да, по существу. Извиняюсь, что-то я на тебя через-чур резко набросился. (Настроение такое...) Мне почему-то казалось, что "l" и "L" в данном контексте равнозначны. (Заглянул в книжку — оказалось нет. smile) Значит, очевидно, что баг Dev'а, т.е. MinGW, вернее gcc под винду из этой сборки, точнее тамошних библиотек, имо.

Цитата(HMLd @  1.2.2007, 00:33 Найти цитируемый пост)

P.S. Какая у Вас версия Дева?

Цитата(About Dev-C++ ;-))

Version 4. Build on: 21.09.2000 23:22:34
Mingw compiler 2.95.2-1 MSVCRT + updates headers and libraries
Cygnus Insight Debugger

Цитата(gcc -v)

Using builtin specs.
gcc version 2.95.2 19991024 (release)

Как более подробно версию самого Дэва (4.x.y.z) посмотреть, не знаю. smile

==========================================================================================

Но проверить на самом деле на основании моего предыдущего поста оень легко: 
Код

// ...
    printf("%d\n", sizeof(double));
    printf("%d\n", sizeof(long double));
    //printf("%Lf\n", a);
    //printf("%Lf\n", b);
    printf("\n%Lf\n%d\n%Lf\n", a, b);
    printf("\n%lf\n%d\n%lf\n", a, b);
// ...

Выдаёт: 
Код

8
12

5.000001
4194304
1000.000000

5.000001
4194304
1000.000000

Да, действительно, тупой Dev думает также как и я несколько десятков минут назад. smile А именно, что "%Lf" равносильно "%lf".


Это сообщение отредактировал(а) V.A.KeRneL - 1.2.2007, 01:32


--------------------
«C'est un pense-creux d'ici. C'est le meilleur et le plus irascible homme du monde...» © Ф.М. Достоевский, «Бесы»
---/)/)---(\.../)---(\(\
--(':'=)---(=';'=)---(=':')
(")(")..)-(").--.(")-(..(")(")

PM MAIL IM ICQ AOL YIM MSN   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.