C - 是数字在整数数组元素上不返回 true,这是


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;

isdigit(int)需要在unsigned charEOF范围内的值,否则为未定义行为。如果char被签名,那么isdigit(int)使用负char值是有问题的。

isdigit(int)'0'…范围内返回true'9'。这些辅音的数值通常是48到57",但它与字符集有关- ASCII是最常见的。

将数字转换为文本数字,使用x + '0'

要测试文本数字并避免使用isdigit()的有限范围,请使用:

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

点击这里查看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中存储任何其他类型的变量。检查……有什么意义?

最新更新