如何将strtol与char而不是字符串一起使用whist在if语句中比较char

如何将strtol与char而不是字符串一起使用whist在if语句中比较char,c,strtol,C,Strtol,我花了很多时间阅读c教程,并让这些代码正确编译/工作(因为我在c上很差劲),我想知道使用strtol的更干净/整洁的方法是什么,而不是getchar(c)然后将c更改为数组chstr[],然后在chstr上使用strtol 谢谢拉克兰 p、 感谢那个些帮助我进行isdigit检查的人 int main() { char c; while((c = getchar()) !=EOF) { if (!check_chr(c)) { retur

我花了很多时间阅读c教程,并让这些代码正确编译/工作(因为我在c上很差劲),我想知道使用strtol的更干净/整洁的方法是什么,而不是
getchar(c)
然后将
c
更改为数组
chstr[]
,然后在
chstr
上使用
strtol

谢谢拉克兰 p、 感谢那个些帮助我进行isdigit检查的人

int main()
{
    char c;

    while((c = getchar()) !=EOF) {
        if (!check_chr(c)) {
            return 0;
        }
    }

    return 1;
}

int check_chr(char c)
{
    int a; char chstr[2];
    if (isdigit(c)) {
        chstr[0] = c; chstr[1] = "/0";
        a = (strtol(chstr,0,0));
        i = i + a;
        return 1;
    }

    if (c == ',')
        return 1;

    if (c == '\n')
        return 1;

    return 0;
}

那么,您可以手动解析数字。诸如此类:

if (c >= '0' && c <= '9')
    number = c - '0';
else
    // error: c is not a decimal digit.

如果(c>='0'&&c那么,您可以手动解析数字。类似于:

if (c >= '0' && c <= '9')
    number = c - '0';
else
    // error: c is not a decimal digit.

如果(c>='0'&&c要将包含一个数字的字符转换为二进制数,只需减去
'0'
的编码形式。这是因为c保证字符编码在连续位置上有0..9

int digit_to_number(char c)
{
  if (isdigit(c))
    return c - '0';
  return -1;
}
这是因为在C中,
'0'
是一个
int
类型的表达式(是
int
,而不是您可能期望的
char
),其计算结果是用于在目标机器的编码中表示
0
。对于以本机方式运行例如UTF-8编码的机器,此值为(十进制)48.对于正在运行的系统,该值为(十进制)240


使用字符文字使将字符数字转换为数字成为编译器的问题,这当然是编译器的问题。

要将包含一个数字的字符转换为二进制数,只需减去
'0'
的编码形式。这是因为C保证字符编码的cons值为0..9活动地点

int digit_to_number(char c)
{
  if (isdigit(c))
    return c - '0';
  return -1;
}
这是因为在C中,
'0'
是一个
int
类型的表达式(是
int
,而不是您可能期望的
char
),其计算结果是用于在目标机器的编码中表示
0
。对于以本机方式运行例如UTF-8编码的机器,此值为(十进制)48.对于正在运行的系统,该值为(十进制)240


使用字符文字使将字符数字转换为数字成为编译器的问题,这当然是编译器的问题。

请注意“/0”是一个包含两个字符的3字节字符串,因此您将一个随机指针的最低有效字节分配给chstr[1]。ASCII零字节的正确表示法是“\0”。双引号用于字符串,单引号用于单个字符。我了解到strtol需要一个字符串结尾字符才能正常工作,因此是/0??但关于这两个字符的有效点不是“/0”是一个包含两个字符的3字节字符串,因此您将随机指针的最低有效字节分配给chstr[1]。ASCII零字节的正确表示法是“\0”。双引号表示字符串,单引号表示单个字符。我了解到strtol需要一个字符串结尾字符才能工作,因此是/0??但关于这两个字符的有效点我很抱歉,但您能否建议一个链接来解释更多内容,我已经看到了-48=数字的示例r eg ascii和您给出的示例,但我不明白您给出的示例实际上是如何工作的。不要紧,我明白您的意思抱歉'0'=48 ascii i抱歉,但您能提供一个链接来解释更多信息吗?我看过a-48=数字eg ascii的示例和您给出的示例,但我不明白您给出的示例是如何工作的i’我真的很管用。没关系,我明白你的意思了抱歉‘0’=48 ascii