2

我正在开发一个程序,该程序需要将文件中的整数读入二维数组。这个概念很简单,我通常对文件 I/O 没问题。我的问题是该文件包含 20 行 18 个数字。这些数字不被空格分隔。一个例子是:

123456789987654321
192837465564738291

我必须将每个单独的数字读入二维数组。我创建了一个 for 循环,但我没有从循环的文件 I/O 部分获得所需的输出。有没有办法做到这一点,或者我是否需要使用解决方法,例如将行读入字符串/数组并将其分割?它快把我逼疯了。在代码中,infile 已经打开并测试过了。GRIDSIZE 的大小为 9,grid 是二维数组

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;
      }
      }
4

2 回答 2

4

在 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';
}
于 2012-04-05T10:53:25.210 回答
3

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

编辑(来自 adohertyd
的评论后):如果 ASCII 字符是数字,您可以从中减去 ASCII 字符“0”以获得实际数字。

于 2012-04-05T10:56:33.273 回答