如何将strtol与char而不是字符串一起使用whist在if语句中比较char
我花了很多时间阅读c教程,并让这些代码正确编译/工作(因为我在c上很差劲),我想知道使用strtol的更干净/整洁的方法是什么,而不是如何将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
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