数字不会在int数组元素上返回true

时间:2015-10-07 17:39:56

标签: c struct pthreads

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不能将数组的元素识别为数字。

数组是结构

的成员
typedef struct
{
    int row;
    int col;
    int arr[SIZE][SIZE];
}parameters;

2 个答案:

答案 0 :(得分:1)

点击此处查看isdigit ..

的文档

isdigit(int)实际上需要一个char值。它返回输入char值是否介于48到57之间(ASCII值为0-9)。

因此,如果您需要检查temp->arr[i][j]是否为数字,则可以使用8 isdigit(48 + temp->arr[i][j])isdigit('0' + temp->arr[i][j])

arr实际上是一个整数数组。因此,您无法在arr中存储任何其他类型的变量。有什么要检查..?您可以使用它来检查数组元素中是否只有一个数字..

答案 1 :(得分: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';
}

这是便携式的。