ifstream用法
>>只能读取输入数值,不能读取输入字符或者字符串。
ifstream的>>遇到空格认为当前读取结束,比如“aa bb",如果>>到一个string,那么string变量中是aa。
getline的参数只能是char*,不能是string。
从文件中读取格式化字符串(格式化输入)sscanf,或者用正则表达式。否则,只能自己写代码,用字符串处理实现。
sscanf在vs2017中需要用sscanf_s代替。格式字符串类型说明:https://en.cppreference.com/w/cpp/io/c/fscanf
格式字符串的示例:
注意,要读取double类型的浮点数,需要用%lf。否则无法得到正确的数值。
#include <iostream>
#include <clocale>
#include <cstdio>int main()
{int i, j;float x, y;char str1[10], str2[4];wchar_t warr[2];std::setlocale(LC_ALL, "en_US.utf8");char input[] = u8"25 54.32E-1 Thompson 56789 0123 56ß水";// parse as follows:// %d: an integer // %f: a floating-point value// %9s: a string of at most 9 non-whitespace characters// %2d: two-digit integer (digits 5 and 6)// %f: a floating-point value (digits 7, 8, 9)// %*d an integer which isn't stored anywhere// ' ': all consecutive whitespace// %3[0-9]: a string of at most 3 digits (digits 5 and 6)// %2lc: two wide characters, using multibyte to wide conversionint ret = std::sscanf(input, "%d%f%9s%2d%f%*d %3[0-9]%2lc",&i, &x, str1, &j, &y, str2, warr);std::cout << "Converted " << ret << " fields:\n"<< "i = " << i << "\nx = " << x << '\n'<< "str1 = " << str1 << "\nj = " << j << '\n'<< "y = " << y << "\nstr2 = " << str2 << '\n'<< std::hex << "warr[0] = U+" << warr[0]<< " warr[1] = U+" << warr[1] << '\n';
}
输出结果
Converted 7 fields:
i = 25
x = 5.432
str1 = Thompson
j = 56
y = 789
str2 = 56
warr[0] = U+df warr[1] = U+6c34
while (!input.eof()) {input >> str;std::cout << str;
}
不会重复读取最后一行,但是会重复输出最后一次读到的内容。这是因为input完成最后一次读取后不会立即设置eof状态,所以程序会再进行一轮循环,在这轮循环input才会设置eof状态。结果就是最后一次读取的内容被输出了两次。
改为
while (input >> str) {std::cout << str;
}
或
for(;;) {if (!(input >> str))break;std::cout << str;
}
也可以考虑用getline(input, str, '\n')
来按行读取。
//调整指针位置时需要在seekg函数前加上clear函数
i = file.tellg();
file >> str1;
file.clear(); //添加clear函数
file.seekg(i);
file >> str2;
ifstream用法相关推荐
- c++输入文件流ifstream用法详解
目录 文章目录 输入流的继承关系: 成员函数 Public member functions 1, (constructor) 2,ifstream::open 3,ifstream:: is_ope ...
- C++ :ofstream 和 ifstream 用法详解
[导读] ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间 在C++中,有一个stream这个类,所有的I/O都以这个"流"类为基础的, ...
- sstream和strstream以及fstream
在C++有两种字符串流,也称为数组I/O流,一种在sstream中定义,另一种在strstream中定义. 它们实现的东西基本一样. strstream里包含 class strstreambuf; ...
- c++ 学习相关链接
window调试环境安装: https://developer.microsoft.com/zh-cn/windows/downloads/windows-sdk/ 深入浅出的讲解傅里叶变换(真正的通 ...
- vs中没有fstream_sstream和strstream以及fstream
在C++有两种字符串流,也称为数组I/O流,一种在sstream中定义,另一种在strstream中定义.它们实现的东西基本一样.strstream里包含class strstreambuf;clas ...
- c++文件流基本用法(fstream, ifstream, ostream)
原文链接 前言: c++的文件流处理其实很简单,前提是你能够理解它.文件流本质是利用了一个buffer中间层.有点类似标准输出和标准输入一样. c++ IO的设计保证IO效率,同时又兼顾封装性和易用性 ...
- ios怎么打开c语言文件操作函数,C++ ofstream和ifstream详细用法以及C语言的file用法...
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个"流"类为基础的,包括我们 ...
- fstream ,ifstream,ofstream的用法详解
fstream的使用方法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个"流&q ...
- C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)
本文主要总结用C++的fstream.ifstream.ofstream方法读写文件,然后用seekg().seekp()函数定位输入.输出文件指针位置,用tellg().tellp()获取当前文件指 ...
最新文章
- 1、使用库函数计算两个向量的夹角
- 快速人脸验证--MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices
- WCF 4.0 Issues with IIS 7.0 on x86 and x64 bit Machines(转载)
- Oracle脚本批量导入时,输出日志文件
- 循环队列及C语言实现三
- Python 函数详解
- 2018-11-08
- oracle 包和包体禁用,Oracle包和包体以及与非包体定义函数、过程的区别
- 接种新冠疫苗到实现完全免疫最快需要35天
- iOS已发布应用中对异常信息捕获和处理(转)
- 将bin文件以16进制字符显示
- 【Matter】解密Matter协议(一)--- 什么是Matter协议?
- jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系
- 云服务器的带宽是什么意思?怎么选择带宽大小?
- 计算机启动bios设置程序,电脑怎样进入BIOS设置
- Python爬虫--喜马拉雅三国音频爬取
- 神经网络与深度学习(一):神经网络与数字识别
- 增强学习(Q-learning)
- 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...
- 猴子都能看懂的噪声(noise)专题
热门文章
- JavaWeb_项目E家园
- Django框架学习——10—(QuerySet源码、QuerySet的方法、将QuerySet转换为SQL去执行、ORM模型练习)
- CSS :has伪类
- NumPy(十七):Meshgrid函数【应用场景:等高线、SVC中超平面的绘制】
- 车载诊断协议UDS——DTC 判定机制以及DTC Status个人见解
- 【Linux实验】LINUX基础命令综合操作
- python 安装 psycopg2 报错问题处理
- matlab中fcn模块函数怎么写,matlabfcn
- hmm 流程图_GitHub - Qu-Xiangjun/HMM_Typewriting_Pinyin
- 乔布斯给年轻人的62个忠告