我目前正在大学上编程基础课程,学习C编程语言。我的一项任务是制作一个程序,创建一个从1到10的随机数,让用户猜测这个数字。我遇到的问题是,我必须使用isdigit()
函数来检查猜测是否是一个数字。我用过
scanf("%c", &userChar);
以以下方式存储参数以检查猜测是否为数字:
if isdigit(userChar)
然而,我想通过将"userChar"转换为int变量来检查,以确保数字在1和10之间,并按以下方式进行检查:
if (userNum >= 1 && userNum <= 10)
我还没有学会如何做到这一点,所以我希望这个网站的人能帮助我。此外,我需要它来检查用户是否猜对了数字。提前谢谢。
由于10不能存储在一个字符中,您需要使用两位数字,或者要求用户猜测一个从0到9(包括0到9)的数字。
要从个位数字符生成int
,请使用以下代码片段:
int digitVal = charDigit - '0';
这是有效的,因为数字0到9在ASCII编码中彼此相邻:1
的代码等于0
的代码加一;2
的代码等于0
的代码加2,依此类推。因此,当你从一个个数字字符中减去0
的代码(在C中表示为'0'
)时,你就得到了相应数字的整数值。
在C中,char
类型是一个积分类型,您可以使用它们进行算术运算。您可以使用强制转换在不同的积分类型之间进行转换-()中的类型名称,例如,要将char
userChar
转换为long
,您可以编写(long)userChar
。但是,在整数表达式中,小于int
的类型被提升为int
,因此不需要强制转换就可以将char
转换为int
。
你需要知道的最后一件事是,无论字符'1'
的整数等价物是什么(实际值不重要),它都比0
的整数等价值多1;换句话说,字符'0'
、'1'
、…、。。。,'9'
由连续的整数范围表示(对于'a'
、'b'
、…、'z'
和'A'
、'B'
、…和'Z'
也是如此)。
因此,如果你知道char
是一个数字(例如,因为你使用了isdigit()
),你可以使用得到它的整数等价物
int intValue = userChar - '0';
C中的数字是'0'、'1'、…、'9’,并且它们是连续的。char
s只是小的int
s,因此userChar - '0'
(假设userChar具有值在'0'
和'9'
之间的char
)的值为0
到9
。
您可以使用它来验证输入。
因此,您需要接受用户输入的整数,该整数可以是1到10。
您可以一次读取一个字符并计算值;例如,如果用户输入'1'
,然后输入'0'
,则需要根据这两个字符计算整数值10
。你应该有足够的信息来做到这一点。
但通常的方法是使用库函数将值直接读取(但请参见下文)到int
对象中。(提示:scanf
,"%d"
;阅读您的文档。)使用这种方法,所有计算都由适当的库函数完成,您无需自己调用isdigit()
。
像scanf
这样的库函数实际上是通过重复调用getchar()
、读取单个字符并以某种方式组合所需信息来工作的。你可以自己做所有的工作,也可以让scanf
为你做。你应该做什么取决于你的任务的确切要求;如果任务的目的是弄清楚如何做scanf
所做的事情,那么当然,仅仅调用scanf
是不可接受的。