我是一名從K & R書中學習C的蟒蛇程序員。這看起來像一個非常微不足道的問題,但我仍然難倒了。 下面附帶的是實現atoi()函數的K & R(RIP Ritchie!)書中的一段代碼。瞭解atoi()函數
atoi(s) /*convert s to integer */
char s[];
{
int i, n, sign;
for (i=0; s[i]==' '||s[i] == '\n' || s[i] == '\t'; i++)
; /* skip whitespace */
sign = 1;
if (s[i] == '+' || s[i] = '-') /* sign */
sign = (s[i++] == '+') ? 1 : -1;
for (n=0; s[i] >= '0' && s[i] <= '9'; i++)
n = 10 * n + s[i] - '0';
return (sign * n);
}
我的問題:
1)做的第一 'for' 循環服務除了計數有效characaters數量任何目的? 2)如果(1)爲真,則第一個循環將'i'的值設置爲有效字符的數量 - 第二個for循環如何工作而不將i重置爲0?
舉例來說,我輸入'2992'作爲函數的輸入。第一個for循環將i設置爲3,那麼函數的其餘部分如何工作? 我可能會把我的基本知識搞砸,但任何幫助都會非常感激。謝謝,-Craig
我不知道C是_that_可怕的。 –
我認爲理解一段代碼的最好方法就是用調試器(例如gdb)執行它,然後一步步前進。同時閱讀代碼和評論裏面可能會有所幫助。 – eyalm
@PatrickB .:就是_very old_ C.現代C看起來......完全一樣:)(除了現在更清晰的'int atoi(const char * s)'的函數簽名外。) – Mat