将read char转换为int c++

cld4siwp  于 2022-11-27  发布在  其他
关注(0)|答案(2)|浏览(209)

在我的程序中,要读取的值(最多两位数)的文件名在终端中给出,我的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;线上,但
如何将读取字符值转换为int型?2或者有没有其他方法可以将它们转换为int型?
我希望从输入文件中获取的值以整数形式工作,而不是以一位数形式工作
我的实际输入文件(.txt)是:

75
95
1
2
45
65
98
6
7
9
ovfsdjhp

ovfsdjhp1#

如何将读取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;
}
sycxhyv7

sycxhyv72#

解决问题的一个简单方法是使用getline()并将其读入char buf[MAX_LINE_LEN],其中MAX_LINE_LEN是输入行的最大大小。使用atoi(buf)代替(int)x。您需要包含stdlib.h
你也可以使用>>运算符直接读入array[i]。如果你必须一次读取一个字符,你可以在一个循环中断中使用num = num * 10 + (x - '0')计算来分隔符(非数字),但这是一个更复杂的解决方案。

相关问题