2014-10-31 51 views
0

這裏是我的代碼,並且即時通訊知道爲什麼我的char *bdin未被regonized爲數字,當它在函數isdigit()中被選中時?這裏是我改進的getline和我的檢查函數,對於檢查函數不要看看參數,我只是創建函數來實驗。我想當我把bdin放在功能isdigit(),它給他們地址到第一個元素[0]。我嘗試用(char *) (bdin)[0]也做的就是第一要素,因爲對方是'\n''\0',但它仍然不幹活......Isdigit do not regonize Char * like digirt

int getline(char *ulaz) 
{ 
    int i , c; 
    for (i = 0; (c = getchar())!= EOF && c!='\n';i++, ulaz++) 
      *ulaz = c; 

    if (c =='\n') 
    *ulaz++ = '\n'; 
     *ulaz = '\0'; 
    return i; 
} 

void checker(void) 
{ 
    int duzina; 
    char *bdin; 
    duzina = getline(&bdin); 
if (isdigit(bdin)) 
    printf("It is digit!!\n"); 
    else 
     printf("no!\n"); 
} 
+0

使用調試器... – 2014-10-31 19:34:48

+0

無論這個代碼有什麼其他可能的錯誤,'isdigit(bdin)'應該是'isdigit(* bdin)' – 2014-10-31 19:37:01

+0

首先,將char * bdin改爲'char bdin' 。有趣的是編譯器沒有提醒你。 – 2014-11-08 20:26:37

回答

1

該計劃不確定的行爲,因爲你沒有分配內存,這將是由bdin指向以及你將要寫入輸入的位置。 此外,該程序還有其他使用不正確數據類型的錯誤。 FPR例如表達

&bdin 

的類型是char **而函數的相應參數有類型char *

同樣在此表達式沒有意義。

ISDIGIT(bdin)

類型功能ISDIGIT的參數是int,而你通過char *你可以寫例如

if (isdigit(*bdin)) 

if (isdigit(bdin[0])) 

,但在任何情況下,該功能將只檢查一個字符是否是數字。

+0

謝謝你,你能告訴我如何編寫代碼以獲取來自funcition getline的代碼的快速提示,並檢查該數字是否? – lotoflaugh 2014-10-31 19:42:59

+0

@lotoflaugh是否要檢查字符串的第一個字符是數字還是字符串只包含數字? – 2014-10-31 19:45:40

+0

對不起,我沒有提供有關此信息,我想檢查該字符串是否只包含數字。我想檢查該行是否是數字,如果它是「1」或「23241」,則無關緊要。但是如果你能告訴我使用函數getline進行處理......這將是我鍛鍊的最佳解決方案。 – lotoflaugh 2014-10-31 19:52:20