我遇到了一个非常奇怪的问题atoi(char *)
。我正在尝试将 a 转换char
为它的数字表示(我知道它是一个数字),它在 98.04% 的时间里工作得很好,但在另外 1.96% 的时间里它会给我一个随机值。
这是我用来测试它的代码:
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
在 XCode 4.6.1 中使用 C 语言方言。第一个 if (当第一个数字不等于第二个时)从不记录,所以两个 atoi 每次都返回相同的结果,但是每次结果都不同。“不正确的结果”似乎范围从 -1000 到 10000。我没有看到任何高于 9999 或低于 -999 的值。
请让我知道我做错了什么。
编辑:
我现在将角色设计更改为:
char numberChar = (char)rand()%10 + 48;
char randomNumber[2];
randomNumber[0] = numberChar;
randomNumber[1] = 0;
但是,我正在使用:
MAX(MIN((int)(myCharacter - '0'), 9), 0)
获取整数值。
我真的很感激所有的答案!