我正在开发一个程序,需要从文件读取整数到2D数组。这个概念很简单,我通常可以使用文件I / O.我的问题是该文件包含20行18个数字。这些数字不是由空格分隔的。一个例子是:
123456789987654321
192837465564738291
我必须将每个单独的数字读入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;
}
}
答案 0 :(得分:4)
调用get() on an ifstream返回一个字符,转换为int。所以尝试改变
infile.get()>>grid[i][j];
到
grid[i][j] = infile.get();
这将为您提供数字的ASCII值。然后,您可以使用isdigit()(如stefaanv所述)确保您确实有一个数字,然后从它们中减去0x30(= 48或'0')以获取整数值(从{{ {3}},数字从0x30变为0x39)。 例如:
int n = infile.get();
if(isdigit(n)) {
grid[i][j] = n - '0';
}
答案 1 :(得分:3)
您可以使用infile.get()来获取角色(如在sonicwave的回答中),并使用isdigit()检查您是否确实有一个整数位。
编辑(在adohertyd发表评论后):
如果ASCII字符是数字,则可以从中减去ASCII字符“0”以获得实际数字。