if (id == 1) printf ("% i", id) печатает случайное значение - PullRequest
1 голос
/ 07 марта 2011

Хорошо. Это должно быть одной из самых странных ошибок, с которыми я столкнулся. У меня есть эти 2 строки в моем коде

 int id=i*2000*512+512*row+column;
 if (id==1){printf("This is output %f %f %f %i \n",entire_red[id],entire_green[id],entire_blue[id],id);}

и это дает мне вывод

Это вывод 0,000000 0,000000 0,000000 109456488.

Понятия не имею, что происходит!

Ответы [ 3 ]

6 голосов
/ 07 марта 2011

Спецификатор формата %f ожидает double (float неявно преобразуется в double для функций с переменными числами). Если variable_red и др. Не являются float или double переменными, то printf будет неправильно обрабатывать аргументы, и это может объяснить, почему целое число id печатается неправильно.

Попробуйте это:

if (id==1)
    printf("This is output %f %f %f %i\n", (double)entire_red[id],(double)entire_green[id],(double)entire_blue[id],id);

В качестве альтернативы, убедитесь, что вы используете правильные спецификаторы формата для переменных entire_red, entire_green и entire_blue.

0 голосов
/ 07 марта 2011

%i печатает неправильные значения, потому что %i ожидает адрес указателя на целое число. Таким образом, вы должны передать &id вместо id.

Я думаю, что остальная часть формата printf уже описана другими ответами.

0 голосов
/ 07 марта 2011

Вы включили stdio.h? Если вы этого не сделаете, компилятор может выбрать соглашение о вызовах, несовместимое с printf, которое будет подбирать «случайные» значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...