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 char
或EOF
范围内的值,否则为未定义行为。如果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
中存储任何其他类型的变量。检查……有什么意义?