将read char转换为int c ++

时间:2015-11-24 18:05:36

标签: c++ terminal

在我的程序中,终端会给出要读取的值(最多2位数字)的文件名,而main()如下所示:

int main ( int argc, char *argv[] )
{
   //assume argv[1] is a filename to open
   ifstream the_file ( argv[1] )
   if ( !the_file.is_open() ){
      cout<<"Could not open file << endl;
      return 0;
   }

   char x;
   int array[10];
   int x_int;
   while ( the_file.get ( x ) ){
        for (int i=0; i<10;i++){
             array[i] = (int)x;
        }
   }

}

然而,我得到了一些奇怪的数字。

我的错误绝对是array[i] = (int)x;行,但是

如何将read char值转换为int?或者是否有任何其他方法将它们作为int类型读取?

我希望从输入文件中获取的值作为整数,而不是单个数字

我的实际输入文件(.txt)是:

75
95
1
2
45
65
98
6
7
9

2 个答案:

答案 0 :(得分:4)

  

如何将read char值转换为int?

您可以通过编写

来解决此问题
array[i] = x - '0';

'1''5'等ASCII字符无法直接投放以获取其等效数字。这样做时,请确保您已经读过数字字符,例如使用std::isdigit()函数。

关于编辑问题后的主要问题:

  

或者是否有其他方法将它们作为int类型读取?

阅读int类型的常用方法只是应用std::istream& operator>>(std::istream&, int&),因此

int array[10];
int i = 0;
int x_int;
while ( the_file >> x_int && i < 10) {
    array[i] = x_int;
    ++i;
}

答案 1 :(得分:0)

解决问题的一种简单方法是使用getline()并将其读入char buf[MAX_LINE_LEN],其中MAX_LINE_LEN是输入行的最大大小。而不是(int)x使用atoi(buf)。您需要包含stdlib.h

您也可以使用>>运算符直接读入array[i]。如果你必须一次读取一个字符,你可以在循环中使用num = num * 10 + (x - '0')计算分隔符(非数字),但这是一个更复杂的解决方案。