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