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

标签 c++ file-io

我正在开发一个需要将整数从文件读入二维数组的程序。这个概念很简单,我通常对文件 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;
      }
      }

最佳答案

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

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

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

这将为您提供数字的 ASCII 值。然后您可以使用 isdigit() (如 stefaanv 所述)以确保您确实有一个数字,然后从中减去 0x30(= 48 或“0”)以获得整数值(从 ASCII chart 可以看出,数字从 0x30 到0x39). 例如:

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

关于c++ - 在 C++ 中一次读取一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10027107/

相关文章:

c++ - SIGALRM 终止进程

c++ - 相机校准结果 : why it is similar to input?

c++ - 为什么从分配给变量的 istream_iterator 读取不起作用?

c - 将文件的每一行读入数组

C++:创建映射到枚举的某种类型的对象

c++ - 模板化函数在返回值时崩溃

java - 如何删除文件中的重复行

c - 使用 Microsoft Visual C++ 6 的 FTP 事务

c - 使用 c 从文件中读取特定范围的行

file-io - 用 Erlang 扫描大二进制文件