#c #if-statement #hex #return-value
Вопрос:
Основываясь на некоторых из приведенных предложений, я отредактировал код, чтобы показать следующее.
#include <stdio.h>
#include <stdlib.h>
//function declaration
unsigned char float_to_hex(float value);
int main()
{
unsigned char hex_value=0x00;
//variable that stores returned hex value
hex_value = float_to_hex(1.0);
printf("The hex value is %xn", hex_value);
return 0;
}
// Function definition
unsigned char float_to_hex(float value)
{
float atten_float=0.0;
unsigned char atten_hex=0x00;
if( atten_float == 0.0)
{
atten_hex = 0x00;
return atten_hex;
}
else if (atten_float== 0.5)
{
atten_hex = 0x01;
return atten_hex;
}
else if (atten_float == 1.0)
{
atten_hex = 0x02;
return atten_hex;
}
else
{
atten_hex = 0x00;
return atten_hex;
}
return -1;
}
Я отредактировал код, инициализировав переменные локально в определении функции. Кроме того, я использую «%x» для печати шестнадцатеричного значения «hex_value», однако я все равно получаю тот же результат, который равен 0.
Ответ №1:
Вы вызвали неопределенное поведение, используя значение нестатической локальной переменной, которая может работать со register
спецификатором atten_float
. Вы должны инициализировать это до некоторого значения, прежде чем использовать значение в переменной.
Также atten_hex
используется без инициализации в atten_float == 0.0
случае. Вы должны добавить туда инициализацию.
Наконец, вы можете использовать %x
вместо %c
печати шестнадцатеричное значение.
#include <stdio.h>
#include <stdlib.h>
//function declaration
unsigned char float_to_hex(float value);
int main()
{
unsigned char hex_value;
//variable that stores returned hex value
hex_value = float_to_hex(1.0);
printf("The hex value is %xn", hex_value); /* use %x instead of %c */
return 0;
}
// Function definition
unsigned char float_to_hex(float value)
{
float atten_float = value; /* add initialization */
unsigned char atten_hex;
if( atten_float == 0.0)
{
atten_hex = 0x42; /* add initialization */
return atten_hex;
}
else if (atten_float== 0.5)
{
atten_hex = 0x01;
return atten_hex;
}
else if (atten_float == 1.0)
{
atten_hex = 0x02;
return atten_hex;
}
else
{
atten_hex = 0x00;
return atten_hex;
}
return -1;
}