繁体   English   中英

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

[英]Reading a file one int at a time in C++

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

123456789987654321
192837465564738291

我必须将每个单独的数字读入二维数组。 我已经创建了一个 for 循环,但我没有从循环的文件 I/O 部分获得所需的 output。 有没有办法做到这一点,或者我是否需要使用变通方法,例如将行读入字符串/数组并将其分开? 这让我发疯。 代码中已经打开并测试了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;
      }
      }

在 ifstream 上调用 get()返回单个字符,转换为 int。 所以尝试改变

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM