我有一个数组(char location [2];)这需要从用户接收两个值。第一个字母是另一个字母,按顺序排列。这用于选择9 x 9网格中的位置。
网格出现
A B C D E F G H I
1
2
3
4
5
6
7
8
9
当我尝试将第二个值存储为int时,我认为可行的方法设置为-48。
int row = location[1] - 48;
48是ASCII值'1'。这不应该创建一个int值,其值小于用户输入的数字吗? '2'(又名49) - 48 = 1?无论输入是什么,它总是以-48出现。
我的全部功能:
#include <iostream>
using namespace std;
void getLocation(int &column, int &row)
{
int row = 0;
int column = 0;
char location[2];
cout << "location: ";
cin.getline(location,2);
cin.ignore();
cin.clear();
switch (location[0])
{
case 'A':
cout << "case A\n";
column = 0;
break;
case 'B':
cout << "case B\n";
column = 1;
break;
case 'C':
cout << "case C\n";
column = 1;
break;
}
row = location[1] - 48;
cout << "column: "
<< column
<< " row: "
<< row
<< "\n";
}
答案 0 :(得分:2)
location[1] - 48
将始终为-48
,因为终止空字符将存储在那里。分配足够的长度来存储输入。您正在使用C ++,因此使用std::string
比使用char
数组更好地存储字符串。
答案 1 :(得分:0)
cin.getline(location,2)
不符合您的预期。
它将以空字符结尾的字符串写入location
,即从location[0]
读取cin
,location[1]
收到值为0
的字符(数字)零,不是'0'
)。
0 - 48
始终生成-48
int
的结果。
另请注意,'1'
不保证值48
。 '0'
用于ASCII和兼容的字符集。其他字符集将给出不同的值。
最好使用std::string
- 这样就无需担心char
和nul终止的数组。
答案 2 :(得分:0)
cin.getline的流大小需要空终止符。因此,增加流缓冲区的大小并终止回车符上的输入:
cin.getline(location, 3, '\r');