2016-05-30 5 views
-1

Я проверил другие сообщения, связанные с этой темой и использовали функцию atoi, чтобы преобразовать строку, но значение всегда равно 0.Преобразование массив символов в atoi не удается

Здесь значения хранятся в hold4:

char hold4[4] = { "0", "." , "1", "5", "\0"); 

Я затем попытаться преобразовать в int и я получаю

int hm = atoi(hold4); 

hm печатает, как:

hm = 0 

Я ожидаю hm быть 0,15, так как это значение в hold4. Я хочу использовать это значение для последующих математических операций.

Вот мой код:

int x = 0; 
int pixel = 0; 
char hold[10]; 
char hold4[4]; 

for(x=0; x < linesCount; x++) 
{ 
    fscanf(model, "%c", &hold[x]); 
    if(hold[x] == '\0' || hold[x] == '\r' || hold[x] == '\n') 
    { 
     hold4[0] = hold[x-4]; 
     hold4[1] = hold[x-3]; 
     hold4[2] = hold[x-2]; 
     hold4[3] = hold[x-1]; 
     hold4[4] = '\0'; 
    // printf("new line: break\n"); 
    } 
    //printf("pixel: %c\n", hold[x]); 
} 

int hm = atoi(hold4); 

printf("\nhold4: %d\n", hm); 

Как сделать эту работу?

+0

Разве вы не заметили, вы надевали 5 значений в массив, объявленный для хранения только 4? –

+0

Ваш код должен генерировать массовые предупреждения компилятора для преобразования указателя в 'char'. Вы пытаетесь сохранить 'char *' в свой 'char' с инициализатором! Предупреждения/ошибки компилятора не просто для удовольствия! – Olaf

ответ

4

Вам не хватает целой цепочки. Целое число - целое число (1, 2, 3, 4 ...) и не может иметь десятичных точек. То, что вы ищете, - float/double.

Try with this: atof()

+0

Спасибо, прекрасно работает. В то же время я столкнулся с проблемой принятия только 1 и 5 конверсий, чтобы atoi затем взял это число и разделил его на 100, чтобы сделать число с плавающей запятой .15. Но atof просто делает именно то, что я хотел. спасибо – user3622460

+1

Я рад, что помог. Просто согласитесь с моим или Майклсом, чтобы ответить на этот вопрос для дальнейшего использования. – Mirakurun

2

Функция atoi преобразует «массив символов» в «целое число», следовательно, имя: (a) rray (to) (i) nt.

Ваш массив символов имеет десятичные знаки, но atoi будет преобразовывать символы только в диапазоне 0-9; он не вернет значение поплавка.

Обратите внимание, что переменная hm явно int типа, и вы печатаете значение с %d, также явно int. Вы уже сделали все необходимое, чтобы убедиться, что единственная возможность - это значение int.

+0

Спасибо, понял! – user3622460

0
char hold4[5] = { '0', '.' , '1', '5', '\0'}; 
double a = atof(hold4); 
printf("%f",a); 

попробовать это