Объясните, пожалуйста, полтергейст с printf
От: 31512  
Дата: 21.09.09 19:04
Оценка: :)))
Здравствуйте Уважаемые. Написал программу на C в MS VC++ 9. Всё хорошо. Всё работает. Программа обсчитывает некоторые статические данные и выводит на консоль. Для вывода использую printf. Среди прочего выводится массив, объявленный как

EXTENDED SumTensorFu[3][3];

где
EXTENDED не более чем
typedef long double EXTENDED;

Все массивы такие. До вывода SumTensorFu выводятся другие массивы и с ними всё хорошо.
Но при выводе SumTensorFu начинается полтергейст. А именно, он выводит всякий бред вроде
***********Fu summ***************************
3.613937e-308 3.613937e-308 3.613937e-308
3.613937e-308 3.613937e-308 3.613937e-308
3.613937e-308 3.613937e-308 3.613937e-308
*********************************************
Это вроде как нуль такой. Начинаю отладку. И к своему удивлению, в отладчике, прямо в процедуре печати вижу, что SumTensorFu содержит как раз вполне вменяемые и ожидаемые аналитически значения. А именно

4.516520e-001 -1.354969e-004 -1.086577e-005
-4.007900e-005 4.517040e-001 2.190850e-006
3.283134e-005 1.019956e-004 4.517676e-001

Отладчик показывает SumTensorFu[0][0] = 4.516520e-001, а на консоль вывелось 3.613937e-308, в отладчике SumTensorFu[0][1] = -1.354969e-004, а в консоли
3.613937e-308 и т.д. При этом точно такие же массивы и даже более замысловатые данные вполне себе вывелись нормально.
Может я какой нюанс не знаю? Или неправильно использую printf?

Процедура вывода:

void PRINT_Fu_Summ()
{
    printf("***********Fu summ***************\n");
    for (int Alfa=0; Alfa<3; Alfa++)
    {
        for (int Beta=0; Beta<3; Beta++)
        {
            printf("%e\t", SumTensorFu[Alfa, Beta]);          
        }
        printf("\n");
    }
    printf("**************************************\n\n");
}

Помогите, пожалуйста разобраться.
Re: Объясните, пожалуйста, полтергейст с printf
От: Fwiffo Россия  
Дата: 21.09.09 19:09
Оценка: 7 (2) +2
Здравствуйте, 31512, Вы писали:

3>
3>    printf("%e\t", SumTensorFu[Alfa, Beta]);          
3>

3>Помогите, пожалуйста разобраться.

Выражение SumTensorFu[Alfa, Beta] делает совершенно не то, что вы думаете
А то что вы хотели записывается SumTensorFu[Alfa][Beta]. Гуглить по словам "оператор запятая".
Re[2]: Объясните, пожалуйста, полтергейст с printf
От: 31512  
Дата: 21.09.09 19:22
Оценка:
Здравствуйте, Fwiffo, Вы писали:
F>Выражение SumTensorFu[Alfa, Beta] делает совершенно не то, что вы думаете
F>А то что вы хотели записывается SumTensorFu[Alfa][Beta]. Гуглить по словам "оператор запятая".

Спасибо.
Re: Объясните, пожалуйста, полтергейст с printf
От: vadimcher  
Дата: 21.09.09 19:31
Оценка:
Здравствуйте, 31512, Вы писали:

3>Здравствуйте Уважаемые. Написал программу на C в MS VC++ 9. Всё хорошо. Всё работает. Программа обсчитывает некоторые статические данные и выводит на консоль. Для вывода использую printf. Среди прочего выводится массив, объявленный как


3> printf("%e\t", SumTensorFu[Alfa, Beta]);


Надо будет занести в базу приколов синтаксиса С++...

А вот зайца кому, зайца-выбегайца?!
Re[2]: Объясните, пожалуйста, полтергейст с printf
От: alzt  
Дата: 22.09.09 06:27
Оценка:
Здравствуйте, vadimcher, Вы писали:

3>> printf("%e\t", SumTensorFu[Alfa, Beta]);


V>Надо будет занести в базу приколов синтаксиса С++...


Да ладно, всего лишь синтаксис. При переходе с шарпа так легко ошибиться.
Re[3]: Объясните, пожалуйста, полтергейст с printf
От: vadimcher  
Дата: 22.09.09 14:39
Оценка:
Здравствуйте, alzt, Вы писали:

A>Здравствуйте, vadimcher, Вы писали:


3>>> printf("%e\t", SumTensorFu[Alfa, Beta]);


V>>Надо будет занести в базу приколов синтаксиса С++...


A>Да ладно, всего лишь синтаксис. При переходе с шарпа так легко ошибиться.


Да нет, я ничего личного. Помнится, когда-то давно, когда в школе нас после Паскаля стали C учить, у меня подобных глюков было не мало. А здесь просто интересно, что синтаксис выглядит абсолютно понятным и интуитивным, и к тому же компилируется даже без ворнинга.

А вот зайца кому, зайца-выбегайца?!
Re[4]: Объясните, пожалуйста, полтергейст с printf
От: Vamp Россия  
Дата: 22.09.09 14:58
Оценка:
V>что синтаксис выглядит абсолютно понятным и интуитивным, и к тому же компилируется даже без ворнинга.
Можно даже придумать такие типы, что будет и работать как надо , с перегрузкой оператора 'запятая'. Только специальный тип для индекса придется вводить.
Да здравствует мыло душистое и веревка пушистая.
Re[5]: Объясните, пожалуйста, полтергейст с printf
От: av Россия  
Дата: 22.09.09 20:53
Оценка:
Здравствуйте, Vamp, Вы писали:

V>>что синтаксис выглядит абсолютно понятным и интуитивным, и к тому же компилируется даже без ворнинга.

V>Можно даже придумать такие типы, что будет и работать как надо , с перегрузкой оператора 'запятая'. Только специальный тип для индекса придется вводить.

Ну совсем прозрачно не получится: сколько типов не создавай, для int-ов запятую не переопределишь
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.