Я испытываю очень странную проблему с atoi(char *)
. Я пытаюсь преобразовать char
в его числовое представление (я знаю, что это число), который отлично работает 98.04% времени, но это даст мне случайное значение в другой 1,96% времени.Odd atoi (char *) issue
Вот код, я использую, чтобы проверить:
int increment = 0, repetitions = 10000000;
for(int i = 0; i < repetitions; i++)
{
char randomNumber = (char)rand()%10 + 48;
int firstAtoi = atoi(&randomNumber);
int secondAtoi = atoi(&randomNumber);
if(firstAtoi != secondAtoi)NSLog(@"First: %d - Second: %d", firstAtoi, secondAtoi);
if(firstAtoi > 9 || firstAtoi < 0)
{
increment++;
NSLog(@"First Atoi: %d", firstAtoi);
}
}
NSLog(@"Ratio Percentage: %.2f", 100.0f * (float)increment/(float)repetitions);
Я использую GNU99
C диалектного языка в XCode 4.6.1. Первое, если (когда первое число не равно второму) никогда не регистрируется, поэтому оба atoi возвращают одинаковый результат каждый раз, однако каждый раз результаты разные. «Ошибочные результаты», по-видимому, варьируются от -1000 до 10000. Я не видел ничего выше 9999 или ниже -999.
Пожалуйста, дайте мне знать, что я делаю неправильно.
EDIT:
Я теперь изменил дизайн персонажей, чтобы:
char numberChar = (char)rand()%10 + 48;
char randomNumber[2];
randomNumber[0] = numberChar;
randomNumber[1] = 0;
Однако, я использую:
MAX(MIN((int)(myCharacter - '0'), 9), 0)
, чтобы получить целое значение.
Я очень ценю все ответы!
Почему вы используете 'atoi' в любом случае?у вас уже есть '[NSString intValue]' –
@xlc Это потому, что его немного безумный, чтобы преобразовать 'char' в' NSString', а затем в 'int'. – RileyE
вам не нужно 'atoi' конвертировать char в int. 'char c = '1'; int i = c - '0'; ' –