在C++中一次读取一个文件一个int
Reading a file one int at a time in C++
我正在编写一个程序,该程序需要将整数从文件读入2D数组。这个概念很简单,我通常对文件I/O很满意。我的问题是这个文件包含20行18个数字。这些数字没有用空格分隔。一个例子是:
123456789987654321
1928374655564738291
我必须将每个单独的数字读入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;
}
}
在ifstream上调用get()将返回一个字符,并将其转换为int。因此,请尝试更改
infile.get()>>grid[i][j];
至
grid[i][j] = infile.get();
这将为您提供该数字的ASCII值。然后,您可以使用isdigit()(如stefaanv所示)来确保您确实有一个数字,然后只需从中减去0x30(=48或'0')即可获得整数值(从ASCII图表中可以明显看出,数字从0x30到0x39)。例如:
int n = infile.get();
if(isdigit(n)) {
grid[i][j] = n - '0';
}
您可以使用infile.get()获取一个字符(如sonicwave的答案),并使用isdigit()检查您是否真的有一个整数。
编辑(根据adohertyd的评论):
如果ASCII字符是一个数字,则可以从中减去ASCII字符"0"以获得实际数字。
相关文章:
- 挂起和取消挂起一个文件DLL
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何将class.cpp和class.hpp编译为一个.o文件
- 如何在 Gnuplot 中分别绘制 2 个文件数据?我有一个文件"sin.txt",另一个文件"cos.txt",我想将它们分别绘制在一个图表上
- 如何从整个磁盘中排除要装载的一个文件
- 如何将模板和非模板函数放在一个文件中
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- 使用 scope 运算符 (::) 引用另一个文件中的类
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 为什么我不能从同一目录中的另一个文件中 #include 我的类?
- 在 c++ 中打开文件、删除标点符号并追加到另一个文件中
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- c++ 提升如果 .extension() == " "这意味着这个文件是一个文件夹?
- 是否可以在 c++ 中创建一个文件并为其提供属性以将其隐藏?(在 Ubuntu 上)
- 我需要编写一个程序来读取一个文件,该文件将输出所有唯一的整数,如果已经看到整数,它将被关闭
- 如何在标准c ++中流式传输/读取二进制文件的中间部分并写入另一个文件?