Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2022, 19:53   #1
ilia21095
Новичок
Джуниор
 
Регистрация: 15.12.2022
Сообщений: 1
Печаль Функция для перевода char в int выдаёт не то что ожидалось

Написал функцию для перевода char в int
Код:
#include <stdio.h>
#include <conio.h>
#include <cmath>

signed int __tCharToInt(char __tStringInCharFormat[]) {
	signed int __tOutputValue = 0;
	if (__tStringInCharFormat[0] == '-') {
		
	} else {
		for (unsigned int __tCounterFor = 0; __tCounterFor <= sizeof(__tStringInCharFormat) - 1; __tCounterFor++) {
			if (__tStringInCharFormat[__tCounterFor] >= 48 && __tStringInCharFormat[__tCounterFor] <= 57) {
				__tOutputValue += (__tStringInCharFormat[__tCounterFor] - '0') * pow(10, sizeof(__tStringInCharFormat) - 1 - __tCounterFor);
			}
		}
	}
	return __tOutputValue;
}


int main() {
	char not_num[] = "52848";
	printf("%d", __tCharToInt(not_num) + 1);
	getch();
}
Ожидается вывод 52849
Выводит 52848001

Подскажите пожалуйста в чём дело!
ilia21095 вне форума Ответить с цитированием
Старый 15.12.2022, 20:35   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Использовать вместо sizeof strlen или признак конца числа (символ вне диапазона цифр).
macomics вне форума Ответить с цитированием
Старый 17.12.2022, 23:32   #3
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от ilia21095 Посмотреть сообщение
Код:
pow(10, sizeof(__tStringInCharFormat) - 1 - __tCounterFor)
Функция pow -- это floating-point арифметика, которая здесь совсем не нужна. Лучше заменить на аналог с целочисленной арифметикой:
Код:
#include <assert.h>

int pow_10(int exponent) {
  assert((0 <= exponent) && (exponent <= 9));
  int r = 1;
  for (int i = 0; i < exponent; i++) {
    r *= 10;
  }
  return r;
}
Пётр Седов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция перевода названий клавиш в #x формат Host-2013 Общие вопросы Delphi 7 12.02.2013 16:06
Объясните как работает эта функция перевода из десятичной в восмеричную систему? severest Помощь студентам 1 02.07.2012 05:57
Функция возвращающая char Exeil Общие вопросы C/C++ 2 18.10.2010 19:42
Функция для char.С/С++ Roker Помощь студентам 0 03.05.2010 08:54
как присвоить char'у символ перевода строки? Retiz Помощь студентам 6 06.04.2008 00:05