1

我花了很多时间阅读 c 教程并让这段代码编译/正常工作(因为我对 c 很烂),我想知道使用 strtol 的更清洁/更整洁的方式是什么,而不是getchar(c)然后更改c为数组chstr[]然后使用strtolon chstr

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

2 回答 2

3

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

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

这是因为 ín C,'0'是一个类型化的int(是的int,不是char你所期望的)表达式,它的计算结果是用于0在目标机器的编码中表示的值。对于本机运行例如ASCII或 UTF-8 编码的机器,该值为(十进制)48。对于运行EBCDIC的系统,该值为(十进制)240。

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

于 2012-04-16T10:53:55.933 回答
1

好吧,您可以手动解析数字。像这样的东西:

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

(放置您的错误处理代码而不是注释)

于 2012-04-16T10:53:03.973 回答