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