[英]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.