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

时间:2012-04-16 10:48:36

标签: c strtol

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

谢谢Lachlan 附:感谢那些帮助我进行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;
}

2 个答案:

答案 0 :(得分:3)

要将包含单个数字的字符转换为二进制数字,只需减去'0'的编码形式即可。这是有效的,因为C保证字符编码在连续位置具有0..9。

int digit_to_number(char c)
{
  if (isdigit(c))
    return c - '0';
  return -1;
}

这是因为ínC,'0'是一个int - 类型(是int,而不是char,如您所料)表达式,其计算结果为在目标机器的编码中表示0。对于运行的机器本地ASCII或UTF-8编码,此值为(十进制)48。对于运行EBCDIC的系统,值为(十进制)240。

使用字符文字可以将字符数字转换为数字编译器的问题,这当然是应该如何。

答案 1 :(得分:1)

好吧,您可以手动解析数字。这样的事情:

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

(把你的错误处理代码而不是评论)