2
在K & R第71頁中,atof函數使用數組索引。我試圖使用指針算法實現相同的功能(因爲它使感覺像一個壞蛋:))。K&R的這個實現有什麼問題?
double atof(char *str)
{
int sign;
double number = 0.0, power = 1.0;
while(isspace(*str))
++str;
sign = (*str == '-') ? -1 : 1; // Save the sign
if(*str == '-' || *str == '+') // Skip the sign
str++;
while(isdigit(*str)) // Digits before the decimal point
{
number = 10.0 * number + (*str - '0');
str++;
}
if(*str == '.') // Skip the decimal point
str++;
while(isdigit(*str)) // Digits after the decimal point
{
number = 10.0 * number + (*str - '0');
power *= 10.0;
str++;
}
return sign * number/power;
}
在主
printf("%g\n", atof(" 123123.123")); // Outputs 123123
printf("%g\n", atof(" 1234.1222")); // Outputs 1234.12
什麼是我的錯!
該死的我應該知道的:)。那麼%g的默認精度是6位數?! – MAA
是(包括*小數*和小數部分的總寬度)。 6是大多數printf精度的默認值。您可以在這裏閱讀C標準中的詳細信息:http://port70.net/~nsz/c/c11/n1570.html#7.21.6.1p8 –
非常感謝你。特別是對於包括這個標準。 – MAA