整数getch() - ' 0'

时间:2014-11-30 04:58:50

标签: c++

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

但是当我连续输入1时,它不会接受它并打印出数字49.我已经研究了它并且了解到getch函数用于获取角色,如果你输入1,它将转换为' 1'相当于49的整数。我使用getch() - ' 0'找到了解决方案。而不是只有getch();

它有效,但我似乎无法理解它是如何工作的解释。有人可以解释一下getch() - ' 0'作品?

我在这里使用了getch() - ' 0':

cout << "Enter row: "; row = getch() -'0';
if(row > 9 || row < 1) {
                cout << "Rows 1 to 9 only!" << endl;
                Sleep(1000);
                system("cls");
                loop -= 1;
} else {
                cout << row << "\nEnter column: "; column = getch() -'0';
                if(column > 9 || column < 1) {
                    cout << "Columns 1 to 9 only!" << endl;
                    Sleep(1000);
                    system("cls");
                    loop -= 1;
}

5 个答案:

答案 0 :(得分:4)

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

现在,如果chars具有int值且1为49,请设想从中减去0的int值。数字从0到9,所以如果一个有49,那么零有48.所以你说,得到这个int值(1 = 49)并减去0&#39; s int value(48),49 -48 = 1。

这适用于代表数字的所有字符。例如:8 - &#39; 0&#39; == 56 - 48 = 8。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

编写时类似

int k=getch()       //stores ascii value of the entered character

作为字符的ascii值&#39; 0&#39;是48因此,如果你将k减去48,你将获得相应的输入数字

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

getch()-'0'

答案 3 :(得分:0)

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

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

C / C ++编译器将单引号字符转换为其ascii代码,因此&#39; 0&#39; 0编译为48。

getch() - &#39; 0&#39;从输入的数字中减去数字范围的ascii代码偏移量,产生从0开始的按下数字的偏移量.0在偏移量0处,1在偏移量1处,2处于偏移量2处,依此类推。

答案 4 :(得分:0)

请注意,您不是减去0但是&#39; 0&#39;。这是一个很大的不同,因为&#39; 0&#39; 0是一个char,所以当你减去它时,你会隐式地将它转换为ASCII值为48的int值。所以你基本上读的是&#34;索引&#34;对于ASCII表中的字符,然后减去你关心的第一个字符的索引以获得相对的&#34;索引&#34;。你的if语句应该处理任何无效的字符,包括字母和符号,这样才能正常工作。