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;
答案 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 char
或EOF
范围内的值,否则它是未定义的行为。如果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';
}
这是便携式的。