将数组中的char变量转换为int C ++

时间:2016-07-10 00:58:42

标签: c++ arrays

我有一个数组(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";
}

3 个答案:

答案 0 :(得分:2)

如果给出正长度字符串,则

location[1] - 48将始终为-48,因为终止空字符将存储在那里。分配足够的长度来存储输入。您正在使用C ++,因此使用std::string比使用char数组更好地存储字符串。

答案 1 :(得分:0)

cin.getline(location,2)不符合您的预期。

它将以空字符结尾的字符串写入location,即从location[0]读取cinlocation[1]收到值为0的字符(数字)零,不是'0')。

0 - 48始终生成-48 int的结果。

另请注意,'1'不保证值48'0'用于ASCII和兼容的字符集。其他字符集将给出不同的值。

最好使用std::string - 这样就无需担心char和nul终止的数组。

答案 2 :(得分:0)

cin.getline的流大小需要空终止符。因此,增加流缓冲区的大小并终止回车符上的输入:

cin.getline(location, 3, '\r');