c++中的IO流(流的概念和流类库的结构,标准的输入输出流)

流的概念和流类库的结构

程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件
c++输入输出包含以下三个方面的内容

  1. 对系统指定的标准设备的输入输出。即从键盘输入数据,输出到显示器屏幕,这种输入输出称为标准的输入输出,简称标准I/O
  2. 以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出,简称文件I/O
  3. 对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入输出称为字符串输入输出,简称串I/O

c++编译器系统提供了用于输入输出的iostream类库,iostream这个单词是由3个部分组成,即i-o-stream,意为输入输出流。在iostream类库中包含许多用于输入输出的类。

标准的输入流

  1. cin.get缓冲区中读取一个字符

  2. cin.get(两个参数)不读换行符

  3. cin.getline()读取换行,并且扔掉

  4. cin.ignore 忽略(N)N代表忽略字符数

  5. cin.peek偷窥 偷看1个字符然后放回去

  6. cin.putback 放回 把字符放回缓冲区

     #include<iostream>using namespace std;/*cin.get()//一次只能读取一个字符cin.get(一个参数)//读一个字符cin.get(两个参数)//可以读字符串cin.getline()cin.ignore()cin.peek()cin.putback()*/void test01(){//输入as  缓冲区中有 a s 和换行 第一个拿 a 第二个拿 s 第三个拿换行,第四次等待下次输入char c=cin.get();cout << "c=" << c<<endl;c = cin.get();cout << "c=" << c << endl;c = cin.get();cout << "c=" << c << endl;c = cin.get();cout << "c=" << c << endl;}void test02(){//cin.get();//可以读字符串char buf[1024];cin.get(buf, 1024);char c = cin.get();if (c == '\n'){cout << "换行还在缓冲区" << endl;}else{cout << "换行不在缓冲区" << endl;}cout << buf << endl;}//cin.get(两个参数)读取字符串时,不会把换行符拿走,遗留在缓冲区中void test03(){char buf[1024];cin.getline(buf, 1024);char c = cin.get();if (c == '\n'){cout << "换行还在缓冲区" << endl;}else{cout << "换行不在缓冲区" << endl;}//cin.getline把换行符读取,并且扔掉}void test04(){cin.ignore(2);//没有参数代表忽略一个字符,带参数n,代表忽略n个字符char c=cin.get();cout << "c=" << c << endl;}//cin.peek()偷窥void test05(){//输入as   偷看一眼a然后再放回缓冲区,缓冲区中还是aschar c = cin.peek();cout << "c=" << c << endl;c = cin.get();cout << "c=" << c << endl;}//cin.putback()数据void test06(){char c = cin.get();cin.putback(c);char buf[1024];cin.getline(buf, 1024);cout << buf << endl;}int main(){//test01();//test02();//test03();//test04();//test05();test06();system("pause");return 0;}
    

输入流案例

  1. 判断用户输入的是字符串还是数字,利用偷窥或者放回

  2. 让用户输入指定范围内的数字,如果不正确请重新输入

     //案列1  判断用户输入的是字符串,还是数组?void test07(){cout << "请输入一串数字或者字符串" << endl;//偷窥char c = cin.peek();if (c >= '0'&&c <= '9'){int num;cin >> num;cout << "您输入的是数字,数字为" << num << endl;}else{char buf[1024];cin >> buf;cout << "您输入的是字符串,字符串为" << buf << endl;}}//案例2 让用户输入1到10的数字,如果输入有误,重新输入void test08(){int num;cout << "请输入一个1到10的数字:" << endl;while (true){cin >> num;if (num > 0 && num <= 10){cout << "输入的数字为" << num << endl;break;}//cout << "对不起请重新输入" << endl;//重置标志位cin.clear();//重置标志位cin.sync();//清空缓冲区//cout << "标志位" << cin.fail() << endl;//标志位0正常的 1不正常}}int main(){//test01();//test02();//test03();//test04();//test05();//test06();//test07();test08();system("pause");return 0;}
    

标准输出流

#include<iostream>using namespace std;/*
cout.put() //向缓冲区写字符
cout.write()//从buffer中写num个字节到当前输出流中
*/void test01()
{//cout.put('a').put('b');char buf[1024] = "helloworld";cout.write(buf, strlen(buf));
}int main()
{test01();system("pause");return 0;
}

标准输出流

#include<iostream>
#include<iomanip>//使用控制符头文件
using namespace std;/*
cout.put() //向缓冲区写字符
cout.write()//从buffer中写num个字节到当前输出流中
*/void test01()
{//cout.put('a').put('b');char buf[1024] = "helloworld";cout.write(buf, strlen(buf));
}void test02()
{//通过流成员函数int number = 99;cout.width(20);cout.fill('*');cout.setf(ios::left);//输入内容做对齐cout.unsetf(ios::dec);//卸载十进制cout.setf(ios::hex);//变为16进制cout.setf(ios::showbase);//强制输出整数的基数 0 0xcout.unsetf(ios::hex);//卸载十六进制cout.setf(ios::oct);//变为8进制cout << number << endl;}//控制符的方式显示
void test03()
{int number = 99;cout << setw(20)<< setfill('^')<< setiosflags(ios::showbase)//基数<< setiosflags(ios::left)//左对齐<< hex //十六进制<< number<< endl;
}int main()
{test03();system("pause");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383284.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MTD应用学习札记

今天做升级方案用到了mtd-utils中的flash_eraseall和flash_cp两个工具&#xff0c;在进行方案验证的时候&#xff0c;遭遇到各种不解和疑惑&#xff0c;因对MTD的原理不熟悉&#xff0c;所以只能多次尝试&#xff0c;虽然最后把方案搞定了&#xff0c;不过觉得MTD中的mtd和mtdb…

c++中的文件读写的操作

写文件 ofstreamopen指定打开方式isopen判断是否打开成功ifs<<“数据”ofs.close&#xff08;&#xff09; 读文件 ifstream ifs 指定打开方式ios::in isopen判断是否打开成功 读取有三种方式 #include<iostream>using namespace std;//文件读写头文件#incl…

udhcpc命令

由于要使用网络通讯&#xff0c;所以不可避免的要用到dhcp。理想的网络通讯方式是下面3种都要支持: 1,接入已有网络。这便要求可以作为dhcp客户端。 2,作为DHCP服务器&#xff0c;动态分配IP。 3,指定固定IP 第3种情况没有什么好说的&#xff0c;简单说下前2种情况。 使用步骤&…

c++的STL--1概念通述

STL的概念 什么是STL? STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 STL从广义上分为&#xff1a;容器(container)&#xff0c;算法(algorit…

socket通信和异常处理札记

Linux socket通信出现CLOSE_WAIT状态的原因与解决方法 这个问题之前没有怎么留意过&#xff0c;是最近在面试过程中遇到的一个问题&#xff0c;面了两家公司&#xff0c;两家公司竟然都面到到了这个问题&#xff0c;不得不使我开始关注这个问题。说起CLOSE_WAIT状态&#xff0c…

mac 下使用wireshark监听网络上的数据

分三个步骤&#xff1a; 1.wireshark安装 wireshark运行需要mac上安装X11&#xff0c;mac 10.8的系统上默认是没有X11的。先去http://xquartz.macosforge.org/landing/下载最新的 xquartz安装&#xff0c;安装好就有X11了。 wireshark的下载&#xff0c;网…

c++的vector容器

vector容器概念 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它…

嵌入式Linux下3G USB Modem的使用

busybox中需打开&#xff1a;wc&#xff0c;pidof&#xff1b; busybox中shell下打开getopts 百度搜索“Serial connection established. using channel 1”包含大量问题解答 2013-12-22 0个评论 收藏 我要投稿 一.ARM-Linux ARM-Linux-2.6.17 3G USB Modem:hu…

新一代数据库技术

新一代非关系型数据库有以下5个主要类型&#xff1a; 面向文件存储&#xff1a;适用于存储海量文件&#xff0c;代表产品MongoDb 列存储(wide column store/column-family)数据库&#xff1a;快速查找相关数据&#xff0c;相关数据被放在同一列中&#xff0c;代表产品Cassandra…

c++中stack容器

Stack 简介 stack 是堆栈容器&#xff0c;是一种“先进后出”的容器。stack 是简单地装饰 deque 容器而成为另外的一种容器。#include stack没有迭代器 Stack所有元素的进出都必须符合“先进后出”的条件&#xff0c;只有stack顶端的元素&#xff0c;才有机会被外界取用&am…

详解udev

如果你使用Linux比较长时间了&#xff0c;那你就知道&#xff0c;在对待设备文件这块&#xff0c;Linux改变了几次策略。在Linux早期&#xff0c;设备文件仅仅是是一些带有适当的属性集的普通文件&#xff0c;它由mknod命令创建&#xff0c;文件存放在/dev目录下。后来&#xf…

c++中的queue容器

queue容器 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端 提取元素。 队列作为容器适配器实现&#xff0c;容器适配器即将特定容器类封装作为其底层容器类&#xff0c;queue提供一组特定的 成员…

NAU8810相关问题

1.ADC和DAC有什么区别&#xff1f; 不&#xff0c;这不是一个“愚弄人的”问题或脑筋急转弯&#xff0c;并且我认为我们的读者都非常清楚模数转换器(ADC)及数模转换器(DAC)的基本功能。 但在如何使用这些转换器以及人们的认知度上也存在着哲理性区别。用最简单的话讲&#xff0…

c++中list容器

list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。list与for…

Linux中rc的含义

在Linux中&#xff0c;最为常用的缩略语也许是“rc”&#xff0c;它是“runcomm”的缩写――即名词“run command”(运行命令)的简写。rc”是任何脚本类文件的后缀&#xff0c;这些脚本通常在程序的启动阶段被调用&#xff0c;通常是Linux系统启动时。如/etc/rc&#xff08;连接…

c++中的set容器和multiset容器

set容器基本概念 set的特性是&#xff0c;所有元素都会根据元素的键值自动被排序。set的元素不像map那样可以同时拥有实值和键值&#xff0c;set的元素即是键值又是实值。set不允许两个元素又相同的键值。我们不可以通过set的迭代器改变set元素的值&#xff0c;因为set元素值就…

linux下的僵尸进程处理SIGCHLD信号

什么是僵尸进程&#xff1f; 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区&#xff0c;关闭所有打开的文件等&#xff0c;但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID&#xff0c;进程的终止状态&#xff0c;以及该进程使用的CPU时…

c++中的map容器

map/multimap基本概念 Map的特性是&#xff0c;所有元素都会根据元素的键值自动排序。Map所有的元素都是pair&#xff0c;同时拥有实值和键值&#xff0c;pair的第一元素被视为键值&#xff0c;第二元素被视为实值&#xff0c;map不允许两个元素有相同的键值我们可以通过map的…

mknod指令详解

mknod - make block or character special files mknod [OPTION]... NAME TYPE [MAJOR MINOR] option 有用的就是 -m 了 name 自定义 type 有 b 和 c 还有 p 主设备号 次设备号 主设备号是由linux/major.h定义的&#xff0c;如下定义了一个DOC设备&am…

c++中容器(STL)的共性与使用的时机

容器的共通能力 C模板是容器的概念 理论提高&#xff1a;所有容器提供的都是值&#xff08;value&#xff09;语意&#xff0c;而非引用&#xff08;reference&#xff09;语意。容器执 行插入元素的操作时&#xff0c;内部实施拷贝动作。所以 STL 容器内存储的元素必须能够被…