Преобразование из строки в число на си
Есть у меня строка введенная с клавиатуры. Нужно из этой строки получить число. Число берется вначале строки если строка будит вида 123 вася пупкин то итоговое число 132 Форматы ввода следующие:
0xac
0b1101
123
564.75
Написал следующий код:
char text[256];
memset(text,0,sizeof(text));
popStrCalc(&StrCalc, text); // выгрузка из стека
char * p2=text;
if(*p2 == '0'){
switch (*(p2+1)) {
case 'x':
case 'X':{
resI = strtol(p2+2,NULL,16);
pushMcalcI(&MCALC,resI); // загрузка в стек
break;
};
case 'b':
case 'B': {
resI = strtol(p2+2,NULL,2);
pushMcalcI(&MCALC,resI);
break;
};
}
}
else{
resI = strtol(text,NULL,10);
pushMcalcI(&MCALC,resI);
}
Проблема не могу понять как можно отличить числа float от int. Преобразовать float хочу '(float)strtod(text,NULL);'.
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
Отличить можно по простому признаку - в float есть либо точка либо буква e
if (strchr(text, '.') == NULL && (strchr(text, 'e') == NULL || strchr(text, 'E') == NULL)) {
puts("it looks like float");
}
но можно заменить на одну функцию
if (strpbrk(text, ".eE") != NULL) {
puts("it looks like float");
}
и есть ещё один случай - если число слишком длинное. Оно хоть и выглядит как целое, но в 32/64 может не влезть. Тут уже по обстоятельствам.