C++中简单的文本文件输入/输出示例详解

为了便于理解,我们把cout 用于控制台输出时的一些情况和写入到文本文件的情况进行类比:

cout 控制台输出

包含头文件 iostream

头文件 iostream 定义了一个 ostream 类用于处理输出

头文件 iostream 声明了一个名为 cout 的 ostream 对象

指明名称空间 std

可以结合使用cout和运算符<<来显示各种类型的数据

文本文件输出(写入到文本文件)

包含文件头 fstream

头文件 fstream 定义了一个ofstream 类用于处理输出

声明一个或多个 ofstream 对象,可以自由命名

指明名称空间 std

把 3 中声明的 ofstream 对象与文件关联起来,比如使用 open()方法

使用完文件后,需要使用 close()方法将其关闭

还可以结合 ofstream 对象和运算符<<来输出各种类型的数据

注意:cout 控制台输入输出中,头文件 iostream 声明了一个名为 cout 的 ostream 对象,无需自己手动声明;文件输出中,我们必须自己动手声明一个 ofstream 对象,为其命名,将其同文件关联起来。请看下面的例子:

#include<fstream>
ofstream OutFile;   //声明一个 ofstream 对象
OutFile.open("study.txt");  //将OF与“study.txt”文件关联起来

下面请看一个完整的程序,用户输入信息,将信息显示到屏幕上,再将这些信息写入到文本文件中:

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    char name[20];
    double height;
    double weight;
    ofstream outFile;//创建了一个ofstream 对象
    outFile.open("information.txt");//outFile 与一个文本文件关联
    cout<<"Enter name: ";
    cin.getline(automobile, 20);
    cout<<"Enter height: ";
    cin>>year;
    cout<<"Enter weight: ";
    cin>>weight;

    // cout 控制台输出前面输入的信息
    cout<<fixed;
    cout.precision(2);
    cout.setf(ios_base::showpoint);
    cout<<"Make and Model: "<<automobile<<endl;
    cout<<"Year: "<<year<<endl;
    cout<<"Was asking $"<<a_price<<endl;
    cout<<"Now asking $"<<d_price<<endl;

    // outFile 把信息写入到文本文件
    outFile<<fixed;    //小数点格式显示double
    outFile.precision(2);    //设置精度
    outFile.setf(ios_base::showpoint);    //强制显示小数点后的零
    outFile<<"Name: "<<name<<endl;
    outFile<<"Height: "<<height<<endl;
    outFile<<"Weight: "<<weight<<endl;
    outFile.close();    //使用完文本文件后要用close()方法将其关闭
    return 0;
}

接下来,我们再把cin 用于控制台输入时的一些情况和读取文本文件的情况进行类比:

cin 控制台输出

包含头文件 iostream

头文件 iostream 定义了一个 istream 类用于处理输出

头文件 iostream 声明了一个名为 cin 的 istream 对象

指明名称空间 std

可以结合使用cin和运算符>>来输入各种类型的数据

文本文件输入(读取文本文件)

包含文件头 fstream

头文件 fstream 定义了一个ifstream 类用于处理输出

声明一个或多个 ifstream 对象,可以自由命名

指明名称空间 std

把 3 中声明的 ifstream 对象与文件关联起来,比如使用 open()方法

使用完文件后,需要使用 close()方法将其关闭

还可以结合 ifstream 对象和运算符>>来读取各种类型的数据

可以用 cin 和 get() 方法来读取一个字符,或用 cin 和 getline() 方法来读取一行字符

可以结合使用 ifstream 和 eof()、fail()方法来判断输入是否成功

如果试图打开一个不存在的文件用于输入将会导致后面使用 ifstream 对象读取数据时发生错误,因此用户需要使用 is_open() 方法检查文件是否被成功打开,如下:

#include <fstream>
#include <cstdlib>
ifstream InFile;
InFile.open("information.txt");
if(!Infile.is_open()){
    exit(EXIT_FAILURE);
}

如果文件被成功打开, is_open() 方法将返回 true , exit()的原型在头文件 cstdlib 中被定义,exit(EXIT_FAILURE) 用于终止程序。

下面请看一个完整的程序,用户打开指定的文本文件,读取文件中的 double 类型数据,并在控制台输出所读取数据的数目、总和以及平均数:

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
const int SIZE = 60;
int main()
{
    char fileName[SIZE];
    ifstream InFile;
    cout<<"Enter the name of data file: ";
    cin.getline(fileName, SIZE);
    cout<<fileName<<endl;
    InFile.open(fileName);
    if(!InFile.is_open()){
        cout<<"Could not open the file "<< fileName <<endl;
        cout<<"Program terminating.\n";
        exit(EXIT_FAILURE);
    }
    double value;
    double sum = 0.0;
    int count = 0;
    InFile >> value;
    while(InFile.good()){
        ++count;
        sum += value;
        InFile >> value;
    }
    if (InFile.eof())
        cout<<"End of file reached:\n";
    else if (InFile.fail())
        cout<<"Input terminated by data mismatch.\n";
    else
        cout<<"Input terminated for unknown reason.\n";
    if(count == 0)
        cout<<"No data processed.\n";
    else{
        cout<<"Items read: "<<count<<endl;
        cout<<"Sum: "<<sum<<endl;
        cout<<"Average: "<<sum/count<<endl;
    }
    InFile.close();
    return 0;
}

总结

到此这篇关于C++中简单的文本文件输入/输出的文章就介绍到这了,更多相关C++文本文件输入/输出内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++从文本文件读取数据到vector中的方法

    前言 大家应该都只奥vector(向量)是 C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.这篇文章介绍的是C++从文本文件读取数据到vector中的方法,下面话不多说,直接来看示例代码吧. 如题,要将如下文本文件读进vector中 示例代码如下 #include <iostream> using namespace std; #include <cmath> #include

  • C/C++读写文本文件、二进制文件的方法

    一:目的 掌握C语言文本文件读写方式: 掌握C语言二进制文件读写方式: 掌握CPP文本文件读写方式: 掌握CPP二进制文件读写方式: 二:C语言文本文件读写 1. 文本文件写入 //采用C模式对Txt进行写出 void TxtWrite_Cmode() { //准备数据 int index[50] ; double x_pos[50], y_pos[50]; for(int i = 0; i < 50; i ++ ) { index[i] = i; x_pos[i] = rand()%1000

  • C++中简单读写文本文件的实现方法

    代码如下所示: 复制代码 代码如下: #include "stdafx.h"#include <iostream>#include <fstream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ //写入文件 ofstream ofs;  //提供写文件的功能 ofs.open("d:\\com.txt",ios::trunc); //trunc打开文件时,清空已存在的文件

  • C++中简单的文本文件输入/输出示例详解

    为了便于理解,我们把cout 用于控制台输出时的一些情况和写入到文本文件的情况进行类比: cout 控制台输出 包含头文件 iostream 头文件 iostream 定义了一个 ostream 类用于处理输出 头文件 iostream 声明了一个名为 cout 的 ostream 对象 指明名称空间 std 可以结合使用cout和运算符<<来显示各种类型的数据 文本文件输出(写入到文本文件) 包含文件头 fstream 头文件 fstream 定义了一个ofstream 类用于处理输出 声明

  • numpy中hstack vstack stack concatenate函数示例详解

    目录 大纲 1.concatenate() 2.stack() 3.vstack() 4.hstack() 5.tf中的stack() 大纲 本文主要介绍一下numpy中的几个常用函数,包括hstack().vstack().stack().concatenate(). 1.concatenate() 我们先来介绍最全能的concatenate()函数,后面的几个函数其实都可以用concatenate()函数来进行等价操作. concatenate()函数根据指定的维度,对一个元组.列表中的li

  • python中前缀运算符 *和 **的用法示例详解

    这篇主要探讨 ** 和 * 前缀运算符,**在变量之前使用的*and **运算符. 一个星(*):表示接收的参数作为元组来处理 两个星(**):表示接收的参数作为字典来处理 简单示例: >>> numbers = [2, 1, 3, 4, 7] >>> more_numbers = [*numbers, 11, 18] >>> print(*more_numbers, sep=', ') 2, 1, 3, 4, 7, 11, 18 用途: 使用 * 和

  • 利用Python中xlwt模块操作excel的示例详解

    目录 一.安装 二.创建表格并写入 三.设置单元格样式 四.设置单元格宽度 五.设置单元格背景色 六.设置单元格内容对齐方式 七.单元格添加超链接 八.单元格添加公式 九.单元格中输入日期 十.合并行和列 十一.单元格添加边框 一.安装 pip install xlwt 二.创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workbook(encoding = 'utf-8') # 添加sheet worksheet = workb

  • logback自定义json日志输出示例详解

    目录 前言 依赖的jar maven坐标 配置Appender节点 appender配置说明: 配置logger节点 logger配置说明: 前言 先说下楼主的使用场景吧,将程序的某些方法调用以json格式的内容记录到文件中,提供给大数据做数据分析用.当然这个需求实现起来很简单,通过aop拦截切面统一输出内容到文件即可.下面要介绍的就是通过logback日志体系以及logstash提供的json log依赖将数据以json格式记录到日志文件的例子. 依赖的jar logstash-logback

  • JS前端中的设计模式和使用场景示例详解

    目录 引言 策略模式 1.绩效考核 2.表单验证 策略模式的优缺点: 代理模式 1.图片懒加载: 2.缓存代理 总结 引言 相信大家在日常学习和工作中都多多少少听说/了解/使用过 设计模式,我们都知道,使用恰当的设计模式可以优化我们的代码,那你是否知道对于前端开发哪些 设计模式 是日常工作经常用到或者必须掌握的呢?本文我将带大家一起学习下前端常见的设计模式以及它们的 使用场景!!! 本文主讲: 策略模式 代理模式 适合人群: 前端人员 设计模式小白/想知道如何在项目中使用设计模式 策略模式 策略

  • Java中的Collections类的使用示例详解

    Collections的常用方法及其简单使用 代码如下: package Collections; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Stack; public class collections { public static void main(String[]args){ int array[]={125,75,56,7}; Li

  • Pandas中的 transform()结合 groupby()用法示例详解

    首先,假设我们有如下餐厅数据集: import pandas as pd df = pd.DataFrame({ 'restaurant_id': [101,102,103,104,105,106,107], 'address': ['A','B','C','D', 'E', 'F', 'G'], 'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham'], 'sales': [10,500,48,12,2

  • python编程中简洁优雅的推导式示例详解

    目录 1. 列表推导式 增加条件语句 多重循环 更多用法 2. 字典推导式 3. 集合推导式 4. 元组推导式 Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮助你在某些场合写出较为精简酷炫的代码.但没有它,也不会有太多影响.Python语言有几种不同类型的推导式. 1. 列表推导式 列表推导式是一种快速生成列表的方式.其形式是用方括号括起来的一段语句,如下例子所示: lis = [x * x for x in range(1, 10)] print(lis) 输出 [1, 4

  • Python中八大图像特效算法的示例详解

    目录 0写在前面 1毛玻璃特效 2浮雕特效 3油画特效 4马赛克特效 5素描特效 6怀旧特效 7流年特效 8卡通特效 0 写在前面 图像特效处理是基于图像像素数据特征,将原图像进行一定步骤的计算——例如像素作差.灰度变换.颜色通道融合等,从而达到期望的效果.图像特效处理是日常生活中应用非常广泛的一种计算机视觉应用,出现在各种美图软件中,这些精美滤镜背后的数学原理都是相通的,本文主要介绍八大基本图像特效算法,在这些算法基础上可以进行二次开发,生成更高级的滤镜. 本文采用面向对象设计,定义了一个图像

随机推荐