将'char'类型转换为 C 语言'int'和保留数据



我目前正在大学上编程基础课程,学习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’,并且它们是连续的。chars只是小的ints,因此userChar - '0'(假设userChar具有值在'0''9'之间的char)的值为09

您可以使用它来验证输入。

因此,您需要接受用户输入的整数,该整数可以是1到10。

可以一次读取一个字符并计算值;例如,如果用户输入'1',然后输入'0',则需要根据这两个字符计算整数值10。你应该有足够的信息来做到这一点。

但通常的方法是使用库函数将值直接读取(但请参见下文)到int对象中。(提示:scanf"%d";阅读您的文档。)使用这种方法,所有计算都由适当的库函数完成,您无需自己调用isdigit()

scanf这样的库函数实际上是通过重复调用getchar()、读取单个字符并以某种方式组合所需信息来工作的。你可以自己做所有的工作,也可以让scanf为你做。你应该做什么取决于你的任务的确切要求;如果任务的目的是弄清楚如何做scanf所做的事情,那么当然,仅仅调用scanf是不可接受的。

最新更新