1.cin和cout

cout是输出流对象的名字,cin是输入流对象的名字 ,“<<”是流插入运算符(也可称流插入操作符〉,作用是将需要输出的内容插入到输出流中,默认的输出设备是显示器。 “>>”是流提取运算符,作用是从默认的输入设备(一般为键盘〉的输入流中提取若干字节送到计算机内存区中指定的变量。需要头文件iostream

cout语句的一般格式为

cout<<表达式1<<表达式2<<...<<表达式n;
cin>>变量1>>变量2>>...>>变量n;

执行cout语句时,并不是输入-个数据马上输出一个数据,而是先把插入的数据顺序在放在输出缓冲区中.直到输出缓冲区满或遇到cout语句中的endl(或’\n’ ,endl)为止,此时将输出缓冲区已有数据输出并清空输出缓冲区。

cin以空格、tab键地、换行做为数据问分隔符。接受一个字符串,遇“空格”、“TAB”、“回车”都结束

char c1,c2;int a;float b;
cin>>c1>>c2>>a>>b;当输入1234 56.78,则输出1 2 34 56.78
系统会自动判别输出类型。
int a=3;float b=4.21;char=’a’;
cout<<a<<’ ’<<b<<’ ‘<<c<<endl;
cin的返回值:当成功提取数据返回非0即true,当失败或文件结束返回0。常用于while(cin>>a){}
关于cin和scanf,cout和printf的区别和特点请参考一本通中P37内容。前面已经学习了C语言又不是很熟悉cin用法的尽量使用scanf和printf,在处理string类型时使用cin
2.getline接受一个字符串,可以接收空格
cin.getline(字符数组(或字符指针),字符个数n,终止标志字符)
char ch[20];
cin.getline(ch,20); //读取19个字符或遇’\n’结束
cin.getline(ch,20,’\’); //读取19个字符或遇’\’结束
string ch; //声明字符串类型
getline(cin,ch); //接受一个string字符串,可以接收空格。读取不限长度字符串到ch。注意上下两种用法的不同

  

string类型和字符串数组的异同

string s;

char str[10];

string

字符串数组

定义具体长度

不需要

需要

s=”Hello!”;

可直接赋值

不能,要用strcpy(str1,str2)

以’\0’为结束符

只存放字符串本身,不包括’\0’

直接用==,>,<,>=,!=进行比较

可以

不可以,要用函数

存储多组字符串

string s[3]={“jk”,”jkl”,”fds”};

str[3][20]={“jk”,”jkl”,”fds”};

 #include<iostream>
//#include<string> //忘记了打也可以在windows的dev cpp通过 ,要考虑到考场上可能不行
#include<cstring>
using namespace std;
int main()
{
string str;
char c[];
cin>>str;
cin>>c;
if(str=="ok") //因str是string类型,可以直接使用=,==,<等
cout<<"yes"<<endl;
else cout<<"no"<<endl;
if(c=="ok") //这种写法错误 ,因为c是字符数组,字符数组不是一等公民
//if(!strcmp(c,"ok"))
cout<<"yes"<<endl;
else cout<<"no"<<endl; return ;
}
/*
由于字符串的本质是数组,它也不是“一等公民”,只能用strcpy(a,b)、strcmp(a,b)、strcat(a,b)来
执行“赋值”、“比较”和“连接”操作。而不能用=、==、<=、+等运算符。上述函数都在string.h中声明。
*/

3.sprintf函数

sprintf是个变参函数,定义如下:

int sprintf( char *buffer, const char *format [, argument] ... );

此函数的功能是把格式化的数据写入某个字符串,它的返回值是字符串长度。包含此函数的头文件是stdio.h。

例如,本程序中的sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);语句的功能是将整数abcdexyx打印成字符串存储在串buff中。

sprintf函数、printf函数、fprintf函数的区别:

printf输出到屏幕,fprintf输出到文件,而sprintf输出到字符串。需要注意是应该保证写入的字符串有足够的空间。

4.sscanf函数

(1)sscanf()表示从一个字符串中读取与指定格式相符的数据。它的函数原型如下:

int sscanf( const char *, const char *, …)

需要的头文件是stdio.h。

(2)sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

如果有一个格式为HH:MM:SS的字符串s(例如,"12:34:56"),用一条sscanf语句得到HH、MM、SS的值如下:

sscanf(s,"%d:%d:%",&HH,&MM,&SS);

将s替换成"12:34:56",可以得到HH的值为12,MM的值为34,SS的值为56。

C++中还有一种“字符串流”,可以实现类似sscanf和sprintf的功能:

 #include <cstdio>
#include <sstream>
using namespace std;
#define MAXN 100010
int main()
{
char s[];
cin.getline(s, , '\n');
stringstream ss(s);
int a, b;
ss >> a >> b;
count << a+b << "\n";
return ;
}

上面的函数先从cin读取一行。Getline函数的第3个参数是行分隔符。它的默认值就是'\n',因此可以简化为cin.getline(s,1000),其中1000的含义和fgets中的类似。

/*读入两个整数,中间用空格隔开,输出他们的和*/

 #include <cstdio>
#include <sstream>
#include <iostream>
#include<string>
using namespace std;
#define MAXN 100010
int main()
{
char s[];
cin.getline(s,,'\n');
//string s;getline(cin,s); //用这句功能类似
stringstream ss(s);
int a,b;
ss>>a>>b; //类似sscanf(s,"%d%d",&a,&b);
cout << a+b << "\n";
return ;
}

5.gets

gets用法gets(s),s是字符数组名,返回值是字符数组起始地址,可以不停往s中存内容不管能不能存下。

6.关于空格的输入输出

输入字符:
char ch;
cin>>ch //只能输入非空格非回车字符
scanf("%c",&ch);//可以输入任意字符
ch = getchar();//可以输入任意字符
输出字符:
cout<<ch;//输出一个字符
printf("%c",ch);//输出一个字符
putchar(ch);//输出一个字符
输入字符串:
char buf[100];
cin>>buf;//输入字符串,以空格、回车结束
gets(buf);//输入一个字符串,可以包含空格,以回车结束,结尾加'\0' cin.getline(buf,100)//输入一个字符串,可以包含空格,以回车结束,清除结束符
getline(cin,buf)//输入一个字符串,可以包含空格,以回车结束,清除结束符
输出:
cout<<buf;//输出字符串
canf("%s",buf);//输出字符串
puts(buf);//向屏幕输出字符串,并换行

  

C++中几种输入输出cin、cin.getline()、getline()、sscanf()、sprintf()、gets()等的更多相关文章

  1. C++语言中cin cin.getline cin.get getline gets getchar 的用法实例

    #include <iostream> #include <string> using namespace std; //关于cin cin.getline cin.get g ...

  2. c++之cin/cin.get/cin.getline()详解

    C++输入过程中,是把输入加载到缓冲区中,然后对缓冲区中的字符进行读取.cin,cin,get(),cin.getline()三个函数虽然都能进行数据读取,但是它们对缓冲区内数据的处理方法是不同的(如 ...

  3. 关于cin, cin.get(), getchar(),getline()的字符问题

    一.getchar()和cin.get() getchar()会将开头的空格或者回车作为输入 1 #include<iostream> 2 using namespace std; 3 i ...

  4. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  5. jsp中两种include的区别【转】

    引用文章:http://www.ibm.com/developerworks/cn/java/j-jsp04293/ http://www.cnblogs.com/lazycoding/archive ...

  6. Java中四种引用:强、软、弱、虚引用

    这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...

  7. [转]C++中四种类型转换符的总结

    C++中四种类型转换符的总结 一.reinterpret_cast用法:reinpreter_cast<type-id> (expression)    reinterpret_cast操 ...

  8. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  9. 计算DNA中每种核苷酸的数目

    问题描述:计算DNA中每种核苷酸的数目 输入文件内容: 代码: 输出结果:

随机推荐

  1. PostgreSQL学习笔记(一)-安装PostgreSQL

    PostgreSQL官网:https://www.postgresql.org/docs/11/index.html1.如何安装2.如何修改配置文件3.如何设置自动启动4.如何修改数据用户密码 本文环 ...

  2. zkw线段树学习笔记

    zkw线段树学习笔记 今天模拟赛线段树被卡常了,由于我自带常数 \(buff\),所以学了下zkw线段树. 平常的线段树无论是修改还是查询,都是从根开始递归找到区间的,而zkw线段树直接从叶子结点开始 ...

  3. 使用scrapy爬虫,爬取今日头条首页推荐新闻(scrapy+selenium+PhantomJS)

    爬取今日头条https://www.toutiao.com/首页推荐的新闻,打开网址得到如下界面 查看源代码你会发现 全是js代码,说明今日头条的内容是通过js动态生成的. 用火狐浏览器F12查看得知 ...

  4. 01pxc集群的部署

    尽可能的控制pxc集群的规模,pxc集群节点越多,数据同步的速度就越慢 所有pxc节点的硬件配置最好相同,pxc集群数据同步的速度取决于配置最低的节点 Pxc集群只支持innodb引擎 安装pxc集群 ...

  5. 彻底搞懂 C# 的 async/await

    前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...

  6. PADS Layout VX.2.3 设置测量精度

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 Pin #7.#8的实际距离是0.65mm,但是测量的结果却是0.7mm.为什么呢?这是由于测量精度的设置不恰当造 ...

  7. window 服务器 安装 sql server 2008 r2 express 并启用远程访问

    目前市面上的数据库服务器虽然好,但是并不便宜,一个月数千RMB, 我们可以通过在已有的数据库上自建数据库来解决 目前已知的SQL Server 2008 R2的版本有: 企业版.标准版.工作组版.We ...

  8. php ReflectionClass类遍历类中包含元素的方法

    ReflectionClass 类 类内容 class MyClass { const myconst1 = 100000001; const myconst2 = [ 1 => '开始时间', ...

  9. python第六天(元组、字典、集合)

    一.元组(tuple) 作用:存多个值,对比列表来说,元组不可变(是可以当做字典的key的),主要用来读 定义:与列表类型相比,只不过把[ ]换成() age=(11,22,33,44,55)prin ...

  10. Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质

    上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理"多而小的任务"的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底 ...