2015-10-07 63 views
1
void* checkRow(void* in) 
{ 
    //pthread_mutex_lock(&count_mutex); 
    parameters* temp = (parameters*) in; 
    int row = temp->row; 
    int col = temp-> col; 
    int i = 0; 
    int j = 0; 
    for (i = row; i < SIZE; i++) 
     for (j = col; j< SIZE; j++) 
     { 
      printf("%d ", isdigit(temp->arr[i][j])); 
      if(isdigit(temp->arr[i][j]) && temp->arr[i][j] <= SIZE) 
      { 
       //pthread_mutex_unlock(&count_mutex); 
       return (void*) 1; 
      } 
     } 

    return (void*) 0; 
} 

由於某些原因,我試圖運行isdigit(temp->arr[i][j])總是返回false而不是true。數組初始化爲所有數字。我在數組上運行了一個printf,它指示數組返回正確的結果,所以我不知道爲什麼isdigit不能將數組的元素識別爲數字。是int數組上的元素不返回true

陣列是結構

typedef struct 
{ 
    int row; 
    int col; 
    int arr[SIZE][SIZE]; 
}parameters; 
+2

*數組與所有數字初始化*你用數字對它們進行初始化裏ke'1',還是像''1''這樣的字符?你需要使用後者而不是前者來使'isdigit()'返回true。 –

+0

我用整數初始化爲1。 – KhoaVo

+2

這就是問題所在。您可以通過向它們添加「0」來將數字轉換爲它們的字符表示。 –

回答

1

isdigit(int)需要一個值的unsigned charEOF的範圍內,否則它是未定義的行爲。如果char已簽名,則isdigit(int)使用負值char值是有問題的。

isdigit(int)當值在範圍'0' ... '9'中時返回true。這些輔音的數值通常是48〜57" ,但它的字符集依賴 - 。ASCII是最常見的10個值必須是連續的

要將一個數轉換爲文本的數字,使用x + '0'

要測試的文本數字,避免使用isdigit()其有限的範圍內,使用:。

int test_isdigit(int x) { 
    return x >= '0' && x <= '9'; 
} 

這是便攜式

1

按此的isdigit文檔的成員..

ISDIGIT(int)的實際需要char值。它返回輸入char的值是否介於48到57之間(ASCII值爲0-9)。

因此,如果您需要檢查temp->arr[i][j]是否是數字,則可以使用八個isdigit(48 + temp->arr[i][j])isdigit('0' + temp->arr[i][j])

arr實際上是一個整數數組。所以你不能在arr中存儲任何其他類型的變量。什麼是檢查點?您可以使用此功能來檢查是否有隻有一個數組的元素位..

相關問題