我花了很多时间阅读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;
}
答案 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.
(把你的错误处理代码而不是评论)