在C++中一次读取一个文件一个int

Reading a file one int at a time in C++

本文关键字:一个 文件 int 读取 一次 C++      更新时间:2023-10-16

我正在编写一个程序,该程序需要将整数从文件读入2D数组。这个概念很简单,我通常对文件I/O很满意。我的问题是这个文件包含20行18个数字。这些数字没有用空格分隔。一个例子是:

123456789987654321
1928374655564738291

我必须将每个单独的数字读入2D数组。我已经创建了一个for循环,但我没有从循环的文件I/O部分获得所需的输出。有没有办法做到这一点,或者我需要使用变通方法,比如将行读取为字符串/数组并将其分割?这让我很生气。在代码中,infile已经被打开并进行了测试。GRIDSIZE的大小为9,网格是2D阵列

int n;
for(int i=0; i<GRIDSIZE; i++)
      {   
    for(int j=0; j<GRIDSIZE; j++)
      {
        infile.get()>>grid[i][j];//This is causing the problem
         // infile >> n //Also tried this, not working
         // grid[i][j] = n;
        cout<<grid[i][j]<<endl;
      }
      }

在ifstream上调用get()将返回一个字符,并将其转换为int。因此,请尝试更改

infile.get()>>grid[i][j];

grid[i][j] = infile.get();

这将为您提供该数字的ASCII值。然后,您可以使用isdigit()(如stefaanv所示)来确保您确实有一个数字,然后只需从中减去0x30(=48或'0')即可获得整数值(从ASCII图表中可以明显看出,数字从0x30到0x39)。例如:

int n = infile.get();
if(isdigit(n)) {
  grid[i][j] = n - '0';
}

您可以使用infile.get()获取一个字符(如sonicwave的答案),并使用isdigit()检查您是否真的有一个整数。

编辑(根据adohertyd的评论):
如果ASCII字符是一个数字,则可以从中减去ASCII字符"0"以获得实际数字。

相关文章: