使用ifstream从文件中读取内容

本文介绍了一种使用C++中的ifstream类从文件中读取数据的方法,详细展示了如何读取一个包含数值矩阵的文本文件,并将其加载到二维数组中。文章通过一个具体的示例,解释了文件打开、读取和关闭的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 使用ifstream从文件中读取内容

文件map.txt的内容如下:
在这里插入图片描述
代码如下:

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

#define N 64 

int main(){ 
	int nrows, ncols; 
	double map[N][N]; 
	string filename; 
	ifstream file; 

	cout <<"请输入文件名.\n"; 
	cin >> filename; 

	file.open(filename.c_str()); 
	if(file.fail()){ 
		cerr<<"打开输入文件出错.\n";
		exit(1);
	}

	file>>nrows>>ncols; 
	if((nrows > N) || (ncols > N)){ 
		cerr<<"数据太大,调整程序.\n"; 
		exit(1); 
	}

	//从数据文件读数据到数组 
	for(int i=0; i<nrows; ++i){ 
		for(int j=0; j<ncols; ++j){ 
			file>>map[i][j];
		} 
	}
	
	//关闭文件 
	file.close(); 
	//结束程序 
	return 0; 
}
### C++ 使用 `ifstream` 读取文件内容 在 C++ 中,可以利用 `<fstream>` 库中的 `std::ifstream` 类来打开并读取文件的内容。下面展示几种常见的方法。 #### 方法一:逐字符读取 通过循环调用 `get()` 函数可以从输入流中每次获取单个字符直到遇到文件结束符 EOF (End Of File)。 ```cpp #include <iostream> #include <fstream> int main() { char ch; std::ifstream infile("example.txt"); while (infile.get(ch)) { // 当未到达EOF时继续执行 std::cout << ch; // 输出到控制台 } infile.close(); } ``` 这种方法适用于处理较小规模的数据或者当只需要按顺序访问每一个单独字符的情况[^1]。 #### 方法二:整行读取 如果希望一次读入一行数据,则可采用 getline() 函数配合字符串变量一起工作: ```cpp #include <iostream> #include <string> #include <fstream> int main(){ std::string line; std::ifstream infile("example.txt"); while(std::getline(infile, line)){ std::cout << line << '\n'; } infile.close(); } ``` 此方式适合于文本文件,并且能够保留每一行之间的分隔信息[^2]。 #### 方法三:整体读取至缓冲区 对于已知大小的文件或者是想要一次性加载整个文件的情形下,可以直接将其全部内容复制到内存中的某个区域里去: ```cpp #include <iostream> #include <vector> #include <fstream> #include <iterator> int main(){ std::ifstream infile("example.txt", std::ios::binary | std::ios::ate); std::streamsize size = infile.tellg(); infile.seekg(0, std::ios::beg); std::vector<char> buffer(size); if (infile.read(buffer.data(), size)) std::cout.write(buffer.data(), size); infile.close(); } ``` 上述代码片段展示了如何以二进制模式 (`std::ios::binary`) 打开文件并将指针定位到最后(`std::ios::ate`) 来计算文件长度;之后再回到起始位置(`seekg`) 并分配适当的空间用于存储文件的所有字节[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值