>>只能读取输入数值,不能读取输入字符或者字符串。

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用法相关推荐

  1. c++输入文件流ifstream用法详解

    目录 文章目录 输入流的继承关系: 成员函数 Public member functions 1, (constructor) 2,ifstream::open 3,ifstream:: is_ope ...

  2. C++ :ofstream 和 ifstream 用法详解

    [导读] ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间 在C++中,有一个stream这个类,所有的I/O都以这个"流"类为基础的, ...

  3. sstream和strstream以及fstream

    在C++有两种字符串流,也称为数组I/O流,一种在sstream中定义,另一种在strstream中定义. 它们实现的东西基本一样. strstream里包含 class strstreambuf; ...

  4. c++ 学习相关链接

    window调试环境安装: https://developer.microsoft.com/zh-cn/windows/downloads/windows-sdk/ 深入浅出的讲解傅里叶变换(真正的通 ...

  5. vs中没有fstream_sstream和strstream以及fstream

    在C++有两种字符串流,也称为数组I/O流,一种在sstream中定义,另一种在strstream中定义.它们实现的东西基本一样.strstream里包含class strstreambuf;clas ...

  6. c++文件流基本用法(fstream, ifstream, ostream)

    原文链接 前言: c++的文件流处理其实很简单,前提是你能够理解它.文件流本质是利用了一个buffer中间层.有点类似标准输出和标准输入一样. c++ IO的设计保证IO效率,同时又兼顾封装性和易用性 ...

  7. ios怎么打开c语言文件操作函数,C++ ofstream和ifstream详细用法以及C语言的file用法...

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个"流"类为基础的,包括我们 ...

  8. fstream ,ifstream,ofstream的用法详解

    fstream的使用方法 ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;  在C++中,有一个stream这个类,所有的I/O都以这个"流&q ...

  9. C++读写文件操作(fstream、ifstream、ofstream、seekg、seekp、tellg、tellp用法)

    本文主要总结用C++的fstream.ifstream.ofstream方法读写文件,然后用seekg().seekp()函数定位输入.输出文件指针位置,用tellg().tellp()获取当前文件指 ...

最新文章

  1. 1、使用库函数计算两个向量的夹角
  2. 快速人脸验证--MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices
  3. WCF 4.0 Issues with IIS 7.0 on x86 and x64 bit Machines(转载)
  4. Oracle脚本批量导入时,输出日志文件
  5. 循环队列及C语言实现三
  6. Python 函数详解
  7. 2018-11-08
  8. oracle 包和包体禁用,Oracle包和包体以及与非包体定义函数、过程的区别
  9. 接种新冠疫苗到实现完全免疫最快需要35天
  10. iOS已发布应用中对异常信息捕获和处理(转)
  11. 将bin文件以16进制字符显示
  12. 【Matter】解密Matter协议(一)--- 什么是Matter协议?
  13. jeecms系统使用介绍——jeecms中的内容、栏目、模型之间的关系
  14. 云服务器的带宽是什么意思?怎么选择带宽大小?
  15. 计算机启动bios设置程序,电脑怎样进入BIOS设置
  16. Python爬虫--喜马拉雅三国音频爬取
  17. 神经网络与深度学习(一):神经网络与数字识别
  18. 增强学习(Q-learning)
  19. 杜教筛 (包括线筛) 莫比乌斯函数前缀和 欧拉函数前缀和 因数和函数前缀和 因子个数前缀和 ( 分析 )...
  20. 猴子都能看懂的噪声(noise)专题

热门文章

  1. JavaWeb_项目E家园
  2. Django框架学习——10—(QuerySet源码、QuerySet的方法、将QuerySet转换为SQL去执行、ORM模型练习)
  3. CSS :has伪类
  4. NumPy(十七):Meshgrid函数【应用场景:等高线、SVC中超平面的绘制】
  5. 车载诊断协议UDS——DTC 判定机制以及DTC Status个人见解
  6. 【Linux实验】LINUX基础命令综合操作
  7. python 安装 psycopg2 报错问题处理
  8. matlab中fcn模块函数怎么写,matlabfcn
  9. hmm 流程图_GitHub - Qu-Xiangjun/HMM_Typewriting_Pinyin
  10. 乔布斯给年轻人的62个忠告