C++ 整数getch()-';0';

C++ 整数getch()-';0';,c++,C++,我已经创建了一个数独游戏,在其中输入行号,然后输入列号。我设置了一个if-else条件,即只输入数字1-9。在输入数字后,我使用了getch函数而不是cin,以避免使用enter按钮 但当我在第行中输入1时,它将不接受它并打印数字49。我对此进行了研究,了解到getch函数用于获取字符,如果输入1,它将转换为“1”,相当于49的整数。我找到了一个解决方案,使用getch()-'0'而不是只使用getch() 它是有效的,但我似乎无法理解它是如何工作的。有人能解释一下getch()-“0”是如何工

我已经创建了一个数独游戏,在其中输入行号,然后输入列号。我设置了一个if-else条件,即只输入数字1-9。在输入数字后,我使用了getch函数而不是cin,以避免使用enter按钮

但当我在第行中输入1时,它将不接受它并打印数字49。我对此进行了研究,了解到getch函数用于获取字符,如果输入1,它将转换为“1”,相当于49的整数。我找到了一个解决方案,使用getch()-'0'而不是只使用getch()

它是有效的,但我似乎无法理解它是如何工作的。有人能解释一下getch()-“0”是如何工作的吗

这里是我使用getch()的地方--“0”:

cout 9 | |行<1){

cout这个技巧依赖于这样一个事实:数字0-9的编码在字符序列中是有序的,在ASCII中,它们是48-57的值。因此,如果键入字符“4”,它将返回52,您可以通过52-48=4将其转换为数字。当然,危险是有人会输入非数字-您需要检查car这个技巧依赖于这样一个事实:数字0-9的编码在字符序列中是有序的,在ASCII中,它们是48-57的值。因此,如果键入字符“4”,它将返回52,您可以通过52-48=4将其转换为数字。当然,危险是有人会输入一个非数字-您可以需要仔细检查错误。

getch()将获取字符的值并将其转换为int值。这就是为什么会得到49

现在如果字符有int值,1是49,想象一下从中减去0的int值。数字的顺序是从0到9,所以如果一个字符有49,那么零就有48。你是说,得到这个int值(1=49),然后减去0的int值(48),49-48=1

这适用于所有表示数字的字符。例如:8-'0'==56-48=8。

getch()将获取字符的值并将其转换为int值。这就是为什么会得到49

现在如果字符有int值,1是49,想象一下从中减去0的int值。数字的顺序是从0到9,所以如果一个字符有49,那么零就有48。你是说,得到这个int值(1=49),然后减去0的int值(48),49-48=1


这适用于所有表示数字的字符。例如:8-'0'==56-48=8。

与您编写的字符类似

int k=getch()       //stores ascii value of the entered character
由于字符“0”的ascii值为48,因此,如果将k减去48 u,将得到相应的输入数字

类似的事情也发生在这里--


getch()-“0”

它与您编写的类似

int k=getch()       //stores ascii value of the entered character
由于字符“0”的ascii值为48,因此,如果将k减去48 u,将得到相应的输入数字

类似的事情也发生在这里--

getch()-“0”

getch()返回按键的ascii码

数字0..9的ascii码是连续的、0=48、1=49、2=50,依此类推

C/C++编译器将单个带引号的字符转换为ascii码,因此“0”编译为48

getch()-“0”从键入的数字中减去数字范围的ascii码偏移量,得到按下的数字从0的偏移量。0在偏移量0处,1在偏移量1处,2在偏移量2处,依此类推。

getch()返回按下的键的ascii码

数字0..9的ascii码是连续的、0=48、1=49、2=50,依此类推

C/C++编译器将单个带引号的字符转换为ascii码,因此“0”编译为48


getch()-“0”是从键入的数字中减去数字范围的ascii码偏移量,产生按下的数字从0的偏移量。0在偏移量0处,1在偏移量1处,2在偏移量2处,依此类推。

请注意,您不是减去0而是减去“0”。这是一个很大的区别,因为“0”是一个字符,所以当您减去它时,您会隐式地凸化把它转换成一个int值,在ASCII中是48。所以你基本上是把“索引”的值读入ASCII表中的字符,然后减去你关心的第一个字符的索引,得到相对的“索引”。您的if语句应该处理所有无效字符,包括字母和符号,这样就可以了。

请注意,您不是在减去0,而是在减去“0”。这是一个很大的区别,因为“0”是一个字符,所以当您减去它时,您会隐式地将其转换为ASCII格式为48的整数值。因此,您基本上是在读取值at是ASCII表中字符的“索引”,然后减去您关心的第一个字符的索引,得到相对的“索引”。您的if语句应该处理所有无效字符,包括字母和符号,因此这应该可以正常工作