- 編譯器:GCC 4.4.5(代碼::塊)
- 平臺:Linux內核版本2.6.32-5-686(Debian的)
我目前正在寫的是轉換字符串的函數成雙倍多頭。我知道已經有一個功能可以做到這一點。我只是寫這個功能的練習,但我目前不知道該怎麼做。如何指示錯誤,因爲所有數字都是有效的返回值?
當我的函數只能處理正雙長整數時,我的函數可以正常工作,因爲如果它們是字符串中的無效字符,我可以返回-1。但我希望這個功能能夠處理負雙倍多頭和正數。我不知道我在這種情況下應該做什麼,因爲現在所有的實數都是有效的返回值。我想通過將無效字符轉換爲十進制值,或僅僅忽略無效字符並僅挑選有效字符0-9(十進制48-57),即使無效字符存在,仍繼續進行轉換。我也想過返回一個指向雙精度長度的指針,並使用NULL地址來表示找到了一個無效的字符,或者我可以像設置功能readdir()
那樣設置errno
。我不知道如何設置errno
或者甚至允許。所以我的問題總的來說是你們會推薦我在這種情況下做什麼?同時請注意,我沒有處理包括負雙多頭尚未和功能將完全忽略無效字符:例如$&3%7AJ89
將被轉換爲3789.
double long cstrtodl(const char *cstr)
{
double long power;
double long dl = 0;
int decimal_place;
int bool_decimal = 0;
for(decimal_place = 1; cstr[decimal_place] != '\0'; decimal_place++)
{
if(cstr[decimal_place] == '.')
{
bool_decimal = decimal_place;
break;
}
}
for(decimal_place--, power = 1; decimal_place >= 0; decimal_place--, power *= 10)
{
printf("[%i] = %i(%c)\nPOWER = %LF\nINTEGER = %LF\n", decimal_place, (int)cstr[decimal_place], cstr[decimal_place], power, dl);
switch(cstr[decimal_place])
{
case 48:
dl += 0 * power;
break;
case 49:
dl += 1 * power;
break;
case 50:
dl += 2 * power;
break;
case 51:
dl += 3 * power;
break;
case 52:
dl += 4 * power;
break;
case 53:
dl += 5 * power;
break;
case 54:
dl += 6 * power;
break;
case 55:
dl += 7 * power;
break;
case 56:
dl += 8 * power;
break;
case 57:
dl += 9 * power;
break;
default:
power /= 10;
break;
}
}
if(bool_decimal > 0)
{
for(decimal_place = bool_decimal+1, power = 10; cstr[decimal_place] != '\0'; decimal_place++, power *= 10)
{
printf("[%i] = %i(%c)\nPOWER = %LF\nINTEGER = %LF\n", decimal_place, (int)cstr[decimal_place], cstr[decimal_place], power, dl);
switch(cstr[decimal_place])
{
case 48:
dl += 0/power;
break;
case 49:
dl += 1/power;
break;
case 50:
dl += 2/power;
break;
case 51:
dl += 3/power;
break;
case 52:
dl += 4/power;
break;
case 53:
dl += 5/power;
break;
case 54:
dl += 6/power;
break;
case 55:
dl += 7/power;
break;
case 56:
dl += 8/power;
break;
case 57:
dl += 9/power;
break;
default:
power /= 10;
break;
}
}
}
return dl;
}
是完全允許如何在不可分析輸入的情況下返回喃? – wildplasser 2013-04-27 14:15:06
@wildplasser我不認爲C有NaNs。 – michaelb958 2013-04-27 14:17:59
通常實現的浮點類型有,但我投票設置'errno'。 – 2013-04-27 14:20:53