C++输入与输出—cout和cin的用法
c++cout、《、cin、》、endl详解

c++cout、《、cin、》、endl详解
std::cout是在#include<iostream>库中的ostream类型中的对象
std::表⽰命名空间,标准库定义的所有名字都在命名空间std中
std::cout是在#include<iostream>库中的istream类型中的对象
std::cout<<a<<std::endl;
上条语句中<<是输⼊运算符,就是将⼤头的那边的量弄进箭头所指的对象中,并返回运算之后的箭头所指的对象
std::endl是⼀个操纵符,作⽤是结束当前⾏,并将与设备关联的缓冲区的内容刷到设备中,最好每个cout都加⼀个endl,利于清除缓存..
std::cin>>a>>b;
在cin中当遇到⽆效的输⼊时,⽐如cin>>v1>>v2,v1是int型,你却输⼊了a,就会返回⼀个⽆效的状态,后⾯的v2也输⼊不了.或者遇到⽂件结尾符时,也会返回⼀个⽆效的状态.
⽂件结尾符在window系统⾥通过Ctrl+Z键⼊,linux中通过Ctrl+D键⼊
上⾯的特性可⽤于读取数量不定的输⼊数据.
#include<iostream>
using namespace std;
int main()
{
int sum = 0, value = 0;
while (cin >> value)
{
sum += value;
}
cout << sum<<endl;
return 0;
}
ps:注释符不能嵌套。
cin的介绍

1.cin简介cin是C++编程语言中的标准输入流对象,即istream类的对象。
cin主要用于从标准输入读取数据,这里的标准输入,指的是终端的键盘。
此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。
这里的标准输出指的是终端键盘,标准错误输出指的是终端的屏幕。
在理解cin功能时,不得不提标准输入缓冲区。
当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符\n,这个换行符\n也会被存储在cin的缓冲区中并且被当成一个字符来计算!比如我们在键盘上敲下了123456这个字符串,然后敲一下回车键(\r)将这个字符串送入了缓冲区中,那么此时缓冲区中的字节个数是7 ,而不是6。
cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发cin的成员函数去读取数据。
2. cin的常用读取方法使用cin从标准输入读取数据时,通常用到的方法有cin>>,cin.get,cin.getline。
2.1cin>>的用法cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。
实例程序如下。
#include <iostream>usingnamespace std;int main(){char a;int b;float c;stringcin>>a>>b>>c;cout<<a<<" "<<b<<" "<<c<<" "<<endl;system("pause");return0;}在屏幕中一次输入:a[回车]11[回车]5.56[回车],程序将输出如下结果:注意:(1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
cin与cout用法

cin与cout用法
cin和cout是C++语言中常用的输入输出流对象。
其中,cin用于从用户输入中读取数据,而cout用于向屏幕或其他输出设备输出数据。
cin的用法如下:
1. 首先需要包含头文件:`#include<iostream>`
2.使用符号`>>`进行输入操作,例如:`cin >> 变量名`
3.读取的数据会存储到对应的变量中。
cout的用法如下:
1. 首先需要包含头文件:`#include<iostream>`
2.使用符号`<<`进行输出操作,例如:`cout << 输出内容`
3.可以同时输出多个内容,例如`cout << 内容1 << 内容2 << ...`
4. 输出结束后可以使用endl进行换行,即:`cout << 输出内容
<<endl`。
需要注意的是,输入的数据类型和变量类型需要保持一致,如果不一致会导致错误或不符合预期。
同样地,输出的内容需要使用正确的格式化方式才能显示正确的结果。
C++cin输入的多种方法详解

C++cin输⼊的多种⽅法详解⽬录前⾔⼀、cin1、cin >>2、cin.get()2.1 函数介绍3、getline()前⾔在C++中⼀般使⽤cin来进⾏交互,获取⽤户输⼊信息。
cin是C++编程语⾔中的标准输⼊流对象,即stream类的对象。
cin主要⽤于从标准输⼊读取数据,这⾥的标准输⼊,指的是终端的键盘。
主要⽤到有cin >>、cin.get()、cin.getline()。
cin读取数据也是从缓冲区中获取数据,缓冲区为空时,cin的成员函数会阻塞等待数据的到来,⼀旦缓冲区中有数据,就触发cin的成员函数去读取数据。
⼀、cin1、cin >>⽀持连续读取,以Tab、空格为分隔符,换⾏符为结束符号;/*----------------------------------------------------------------------> File Name: cinDemo01.cpp> Author: Jxiepc> Mail: Jxiepc> Created Time: Mon 20 Sep 2021 10:09:55 AM CST----------------------------------------------------------------------*/#include<iostream>#include<unistd.h>#include<cstring>int main(int argc, char *argv[]){std::string s;while(std::cin >> s){std::cout << s << std::endl;}return 0;}当cin>>从缓存区读取数据时,会⾃动忽略作为第⼀个字符存在的Tab、空格(Space)、换⾏,继续读取下⼀个字符,若缓存区为空,则等待。
cin与cout的用法

cin与cout一:标准输入函数cin不知道说它是个函数对还是不对,它是代表标准的输入设备--键盘。
他是属于流的,他的用法和流的用法是一样的。
也就是:cin>>变量;小小的说明一下,输入多个变量可以写在一行,如:cin>>x>>y>>z;这样写不是不允许,而是不好看,如果是不同的变量类型,那就更是没头没脑了。
除了你,人家是不知道该输入什么的,所以,一般在输入语句的前面,我们一般都要做一个提示,请输入×××,让人家心里有个底,知道这个变量是做什么的。
另外,这个函数是不用带地址符号"&"的,也不用写明变量类型,千万不要跟scanf混淆。
当然他就也不检查变量输入是否合法。
如:inti;cout<<"pleaseinputanumber:"cin>>i;cout<<"i="<<i<<endl;如果你输入的是一个字符如'a'那么他也不检查,但你输出的结果不是正确的,这要是手工进行检查。
当然他也跟scanf一样,如果在循环内部输入不合法的变量值,那么也将陷入死循环。
如下:/*一个输入不合法变量陷入死循环的例子*/#include<iostream.h>main(){inti;while(i!=-1){cout<<"i="cin>>i; /*请输入不是一个字符如'a'试试*/cout<<endl;}}如上一个程序,如果你输入的不合法,那就将陷入死循环。
解决的办法有个一,把cin>>i;语句移到判断循环的语句中,那么,你输入的如果是不合法的变量,他将跳出循环。
cin是用空格来分隔输入的。
请看看如下的例子:/*一个空格分隔使输入的变量达不到希望的值*/#include<iostream.h>main(){charstr[20];cout<<"pleaseinputastring:"; cin>>str; /*你试着输入"helloword"*/ cout<<endl<<"str="<<str;}看得到是什么结果呢?得到的仅仅是str=hello,为什么呢?因为cin是以空格为分隔的,当你输入一个空格时,那他就认为后面的输入不属于这里了,认为应该给后面的变量了。
转载C++输入与输出—cout和cin的用法

转载C++输⼊与输出—cout和cin的⽤法转载⽹址:输⼊和输出并不是C++语⾔中的正式组成成分。C和C++本⾝都没有为输⼊和输出提供专门的语句结构。输⼊输出不是由C++本⾝定义的,⽽是在编译系统提供的I/O库中定义的。C++的输出和输⼊是⽤“流”(stream)的⽅式实现的。图3.2和图3.3表⽰C++通过流进⾏输⼊输出的过程。有关流对象cin、cout和流运算符的定义等信息是存放在C++的输⼊输出流库中的,因此如果在程序中使⽤cin、cout和流运算符,就必须使⽤预处理命令把头⽂件stream包含到本⽂件中:#include <iostream>尽管cin和cout不是C++本⾝提供的语句,但是在不致混淆的情况下,为了叙述⽅便,常常把由cin和流提取运算符“>>”实现输⼊的语句称为输⼊语句或cin语句,把由cout和流插⼊运算符“<<”实现输出的语句称为输出语句或cout语句。根据C++的语法,凡是能实现某种操作⽽且最后以分号结束的都是语句。⼀、输⼊流与输出流的基本操作cout语句的⼀般格式为:cout<<表达式1<<表达式2<<……<<表达式n;cin语句的⼀般格式为:cin>>变量1>>变量2>>……>>变量n;在定义流对象时,系统会在内存中开辟⼀段缓冲区,⽤来暂存输⼊输出流的数据。在执⾏cout语句时,先把插⼊的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或'\n',ends,flush)为⽌,此时将缓冲区中已有的数据⼀起输出,并清空缓冲区。输出流中的数据在系统默认的设备(⼀般为显⽰器)输出。⼀个cout语句可以分写成若⼲⾏。如cout<<"This is a simple C++ program."<<endl;可以写成cout<<"This is " //注意⾏末尾⽆分号<<"a C++ "<<"program."<<endl; //语句最后有分号也可写成多个cout语句,即cout<<"This is "; //语句末尾有分号cout <<"a C++ ";cout <<"program.";cout<<endl;以上3种情况的输出均为This is a simple C++ program.注意不能⽤⼀个插⼊运算符“<<”插⼊多个输出项,如:cout<<a,b,c; //错误,不能⼀次插⼊多项cout<<a+b+c; //正确,这是⼀个表达式,作为⼀项在⽤cout输出时,⽤户不必通知计算机按何种类型输出,系统会⾃动判别输出数据的类型,使输出的数据按相应的类型输出。如已定义a为int型,b 为float型,c为char型,则cout<<a<<' '<<b<<' '<<c<<endl;会以下⾯的形式输出:4 345.789 a与cout类似,⼀个cin语句可以分写成若⼲⾏。如cin>>a>>b>>c>>d;可以写成cin>>a //注意⾏末尾⽆分号>>b //这样写可能看起来清晰些>>c>>d;也可以写成cin>>a;cin>>b;cin>>c;cin>>d;以上3种情况均可以从键盘输⼊: 1 2 3 4 ↙也可以分多⾏输⼊数据:1↙2 3↙4↙在⽤cin输⼊时,系统也会根据变量的类型从输⼊流中提取相应长度的字节。如有char c1,c2;int a;float b;cin>>c1>>c2>>a>>b;如果输⼊1234 56.78↙注意: 34后⾯应该有空格以便和56.78分隔开。也可以按下⾯格式输⼊:1 2 34 56.78↙ (在1和2之间有空格)不能⽤cin语句把空格字符和回车换⾏符作为字符输⼊给字符变量,它们将被跳过。如果想将空格字符或回车换⾏符(或任何其他键盘上的字符)输⼊给字符变量,可以⽤3.4.3节介绍的getchar函数。在组织输⼊流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输⼊,否则容易出错。⼆、在输⼊流与输出流中使⽤控制符上⾯介绍的是使⽤cout和cin时的默认格式。但有时⼈们在输⼊输出时有⼀些特殊的要求,如在输出实数时规定字段宽度,只保留两位⼩数,数据向左或向右对齐等。C++提供了在输⼊输出流中使⽤的控制符(有的书中称为操纵符)。需要注意的是: 如果使⽤了控制符,在程序单位的开头除了要加iostream头⽂件外,还要加iomanip头⽂件。举例: 输出双精度数。double a=123.456789012345;对a赋初值(1) cout<<a;输出: 123.456(2) cout<<setprecision(9)<<a;输出: 123.456789(3) cout<<setprecision(6);恢复默认格式(精度为6)(4) cout<< setiosflags(ios∷fixed);输出: 123.456789(5) cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;输出: 123.45678901(6) cout<<setiosflags(ios∷scientific)<<a;输出: 1.234568e+02(7) cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a; 输出: 1.2346e02下⾯是整数输出的例⼦:int b=123456;对b赋初值(1) cout<<b;输出: 123456(2) cout<<hex<<b; 输出: 1e240(3) cout<<setiosflags(ios∷uppercase)<<b;输出: 1E240(4) cout<<setw(10)<<b<<','<<b; 输出: 123456,123456(5) cout<<setfill('*')<<setw(10)<<b;输出: **** 123456(6) cout<<setiosflags(ios∷showpos)<<b;输出: +123456如果在多个cout语句中使⽤相同的setw(n),并使⽤setiosflags(ios∷right),可以实现各⾏数据右对齐,如果指定相同的精度,可以实现上下⼩数点对齐。例3.1 各⾏⼩数点对齐。#include <iostream>#include <iomanip>using namespace std;int main( ){double a=123.456,b=3.14159,c=-3214.67;cout<<setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision(2);cout<<setw(10)<<a<<endl;cout<<setw(10)<<b<<endl;cout<<setw(10)<<c<<endl;return0;}输出如下:123.46 (字段宽度为10,右对齐,取两位⼩数)3.14-3214.67先统⼀设置定点形式输出、取两位⼩数、右对齐。这些设置对其后的输出均有效(除⾮重新设置),⽽setw只对其后⼀个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。学C++的时候,这⼏个输⼊函数弄的有点迷糊;这⾥做个⼩结,为了⾃⼰复习,也希望对后来者能有所帮助,如果有差错的地⽅还请各位多多指教(本⽂所有程序均通过VC 6.0运⾏)转载请保留作者信息;1、cin1、cin.get()2、cin.getline()3、getline()4、gets()5、getchar()1、cin>>⽤法1:最基本,也是最常⽤的⽤法,输⼊⼀个数字:#include <iostream>using namespace std;main (){int a,b;cin>>a>>b;cout<<a+b<<endl;}输⼊:2[回车]3[回车]输出:5⽤法2:接受⼀个字符串,遇“空格”、“TAB”、“回车”都结束#include <iostream>using namespace std;main (){char a[20];cin>>a;cout<<a<<endl;}输⼊:jkljkljkl输出:jkljkljkl输⼊:jkljkl jkljkl //遇空格结束输出:jkljkl2、cin.get()⽤法1: cin.get(字符变量名)可以⽤来接收字符#include <iostream>using namespace std;main (){char ch;ch=cin.get(); //或者cin.get(ch);cout<<ch<<endl;}输⼊:jljkljkl输出:j⽤法2:cin.get(字符数组名,接收字符数⽬)⽤来接收⼀⾏字符串,可以接收空格#include <iostream>using namespace std;main (){char a[20];cin.get(a,20);cout<<a<<endl;}输⼊:jkl jkl jkl输出:jkl jkl jkl输⼊:abcdeabcdeabcdeabcdeabcde (输⼊25个字符)输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')⽤法3:cin.get(⽆参数)没有参数主要是⽤于舍弃输⼊流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数⽬)的不⾜.这个我还不知道怎么⽤,知道的前辈请赐教;3、cin.getline() // 接受⼀个字符串,可以接收空格并输出#include <iostream>using namespace std;main (){char m[20];cin.getline(m,5);cout<<m<<endl;}输⼊:jkljkljkl输出:jklj接受5个字符到m中,其中最后⼀个为'\0',所以只看到4个字符输出;如果把5改成20:输⼊:jkljkljkl输出:jkljkljkl输⼊:jklf fjlsjf fjsdklf输出:jklf fjlsjf fjsdklf//延伸://cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符)//当第三个参数省略时,系统默认为'\0'//如果将例⼦中cin.getline()改为cin.getline(m,5,'a');当输⼊jlkjkljkl时输出jklj,输⼊jkaljkljkl时,输出jk当⽤在多维数组中的时候,也可以⽤cin.getline(m[i],20)之类的⽤法:#include<iostream>#include<string>using namespace std;main (){char m[3][20];for(int i=0;i<3;i++){cout<<"\n请输⼊第"<<i+1<<"个字符串:"<<endl;cin.getline(m[i],20);}cout<<endl;for(int j=0;j<3;j++)cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;}请输⼊第1个字符串:kskr1请输⼊第2个字符串:kskr2请输⼊第3个字符串:kskr3输出m[0]的值:kskr1输出m[1]的值:kskr2输出m[2]的值:kskr34、getline() // 接受⼀个字符串,可以接收空格并输出,需包含“#include<string>”#include<iostream>#include<string>using namespace std;main (){string str;getline(cin,str);cout<<str<<endl;}输⼊:jkljkljkl输出:jkljkljkl输⼊:jkl jfksldfj jklsjfl输出:jkl jfksldfj jklsjfl和cin.getline()类似,但是cin.getline()属于istream流,⽽getline()属于string流,是不⼀样的两个函数5、gets() // 接受⼀个字符串,可以接收空格并输出,需包含“#include<string>”#include<iostream>#include<string>using namespace std;main (){char m[20];gets(m); //不能写成m=gets();cout<<m<<endl;}输⼊:jkljkljkl输出:jkljkljkl输⼊:jkl jkl jkl输出:jkl jkl jkl类似cin.getline()⾥⾯的⼀个例⼦,gets()同样可以⽤在多维数组⾥⾯:#include<iostream>#include<string>using namespace std;main (){char m[3][20];for(int i=0;i<3;i++){cout<<"\n请输⼊第"<<i+1<<"个字符串:"<<endl;gets(m[i]);}cout<<endl;for(int j=0;j<3;j++)cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;}请输⼊第1个字符串:kskr1请输⼊第2个字符串:kskr2请输⼊第3个字符串:kskr3输出m[0]的值:kskr1输出m[1]的值:kskr2输出m[2]的值:kskr3⾃我感觉gets()和cin.getline()的⽤法很类似,只不过cin.getline()多⼀个参数罢了;这⾥顺带说明⼀下,对于本⽂中的这个kskr1,kskr2,kskr3的例⼦,对于cin>>也可以适⽤,原因是这⾥输⼊的没有空格,如果输⼊了空格,⽐如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!⽽cin.getline()和gets()因为可以接收空格,所以不会产⽣这个错误;6、getchar() //接受⼀个字符,需包含“#include<string>”#include<iostream>#include<string>using namespace std;main (){char ch;ch=getchar(); //不能写成getchar(ch);cout<<ch<<endl;}输⼊:jkljkljkl输出:j。
cin,cout用法详解

在C中,输入输出要用printf和scanf,这是2个很麻烦的东西,因为在输入数据的同时还要说明数据的类型,如果输入数据较多,那就很麻烦了,所以我们的C++搞了两个更爽的东西cout和cin,来替换它们.首先我们先了解一下这两个东西的来处,它们是来自C++的一个类库叫 " iostream".iostream是由istream(输入类)和ostream(输出类)派生.所以在iostream中就有了输入和输出的相关对象:1,cin,表示标准输入(standard input)的istream类对象.cin使我们可以从设备读取数据.2,cout,表示标准输出(standard output)的ostream类对象.cout使我们可以向设备输出或者写数据.3,cerr(暂时还没试过,先别理吧)暂时先介绍那么多,这里我主要想说的是cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.首先看看cin.get(),它是一个读取单个字符的方法.字符变量=cin.get();相当于cin.get(字符变量);#include<iostream>usingnamespace std;int main(){char cstr;cstr=cin.get(); //读取单个字符,在屏幕输入,也相当于cin.get(cstr);cout<<cstr<<endl; //输出刚刚载入的单个字符system("pause");}运行程序后,一切正常:输入:a 输出:a但当我们输入的不只一个英文字符时,那又会如何呢?输入:abcd 输出:a由此可知,它只能读取第一个字符,但如果我们把程序修改成:int main(){char cstr;char bstr;cstr=cin.get(); //读取单个字符,在屏幕输入bstr=cin.get();cout<<cstr<<bstr<<endl; //输出刚刚载入的单个字符system("pause");}我们再输入:abcd 最后输出了:ab既然cin.get()是读取第一个字符,那bstr为什么不也是a呢?其实原理是这样的:在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,但事实上是cin里封装的一个东西.当我们在程序上输入字符后,对象cin获得了我们输入的字符,例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给cstr,这时,cin里储存的流的数据为bcd,而cstr则获得了 a.当我们再次运行bstr=cin.get();时,同理把cin里流的数据的b拿出来给了bstr,此后,cin里面的流的数据为cd,而bstr则为b,所以最后输出时,便能输出ab了.还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据,我们再输入字母'b',按回车后便输出ab了.相信到这里,大家都应该明白了,因为当我们第一次输入a后,通过cstr=cin.get();使cin里的流没有数据,清空了.所以到第二次要再赋给bstr值时,它找不到数据,要重新再输入数据.由此来看可以知道,当cin里的流数据清空时,便需要重新输入才能赋值.而cin.get()还有个用法:int main(){char cstr;char bstr;cstr=cin.get(); //读取单个字符,在屏幕输入cin.get();bstr=cin.get();cout<<cstr<<bstr<<endl; //输出刚刚载入的单个字符system("pause");}程序中有3个cin.get(),所以我们尝试输入:abc. 发现输出了:ac由此能知道,当空回调cin.get();时,cin.get便自动在cin中的流数据中删除一个字母,起了一个删除作用.对cin.get()有了一定了解之后,对cin.getline()的学习就可以更快了,原理是一致的,但是cin.getline()则是获取一整行文本.以下是cin.getline()原形: getline(char *line,intsize,char='\n')第一个就是字符指针,第二个是字符长度,第三个1行的结束标识符.int main(){char cstr[200];cin.getline(cstr,sizeof(str));//第三个参数不输入,默认回车为结束标识符cout<<cstr<<endl; //输出system("pause");}这样我们输入一堆英文或数字,然后按回车,就会输出一行刚刚输出的东西了.接下来.我们讨论第三个参数的作用.int main(){char cstr[200];cin.getline(cstr,sizeof(str),'X'); //我们以单个英文字母'X'作为终止标识符cout<<cstr<<endl; //输出system("pause");}当我们输入一大堆东西,例如输入: kkkkkkk(回车) 输出: kkkkkkk(回车)llllllx(回车) llllll这样X便成了终止符,其原理和cin.get一样.或许我们可以像cin.get那样尝试一下:int main(){char cstr[200];char bstr[200];cin.getline(cstr,sizeof(str),'X'); //我们以单个英文字母'X'作为终止标识符cin.getline(bstr,sizeof(btr),'a');cout<<"第一行是:"<<cstr<<endl; //输出cout<<"第二行是:"<<bstr<<endl;system("pause");}我们输入:kkkkkkkkk(回车) 输出:第一行是:kkkkkkkkk(回车)oooooooooX(回车) oooo ooooo(回车)bbbbbbbbba(回车) 第二行是:(回车)bbbbbbbbb在这里,我在不厌其烦地说一下原理,如果刚刚cin.get()原理看懂的可以跳过. 首先,我们第一次getline会把X前面的字符赋给cstr,然后从cin里的数据流删除,标识符X也删除了,所以输出的cstr如上所示.当我们第二次运行getline 时,此时cin里的数据流为(回车)bbbbbbbbba,回车也是一个字符,事实上在数据流里用"\n"表示,接着就按照原来第一次的方法,把标识符'a'前面的字符赋给bstr,然后再删除字符号及标识符.所以输出结果如上.接下来我们谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin 里面的数据流,而实际上却与此相差很远,首先我们看看以下代码:#include<iostream>usingnamespace std;int main(){int a;cin>>a;cout<<cin.rdstate()<<endl;if(cin.rdstate() == ios::goodbit){cout<<"输入数据的类型正确,无错误!"<<endl;}if(cin.rdstate() == ios_base::failbit){cout<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl; }system("pause");}我们定义要输入到的变量是整型,但如果我们输入了英文字母或者汉字,那就会发生错误,cin里有个方法能检测这个错误,就是cin.rdstate();当cin.rdstate()返回0(即ios::goodbit)时表示无错误,可以继续输入或者操作,若返回4则发生非致命错误即ios::failbit,则不能继续输入或操作.而cin.clear则可以控制我们此时cin里对这个问题的一个标识.语发如下:cin.clear(标识符);标识符号为:∙goodbit 无错误∙Eofbit 已到达文件尾∙failbit 非致命的输入/输出错误,可挽回∙badbit 致命的输入/输出错误,无法挽回若在输入输出类里.需要加ios::标识符号通过cin.clear,我们能确认它的内部标识符,如果输入错误则能重新输入.结合真正的清空数据流方法cin.sync(),请看下例:#include<iostream>usingnamespace std;int main(){int a;while(1){cin>>a;if(!cin) //条件可改写为cin.fail(){cout<<"输入有错!请重新输入"<<endl;cin.clear();cin.sync(); //清空流}else{cout<<a;break;}}system("pause");}上面的cin默认参数为0,即无错误,正常操作.当我们输入英文字母'k'时,它的状态标识改为fail(即1),即错误,用cout对用户输出信息,再用cin.clear 让错误标识改回为0,让我们可以继续输入,再清空流数据继续输入.如果我们没有了cin.clear,则会进入死循环,其过程为我们输入了英文字母,它的状态标识便为fail,当运行到条件判断时,便总是回到错误的条件表示里,并且我们再也没办法输入,因为错误的表示关闭了cin,所以会进入死循环.对比:输入字符串1.cin>>的读入方式总是将前导的空格(包括空格,回车,水平或垂直制表符等)过滤2.getline可将字符串一次性地输入。
cout函数的用法

cout函数的用法C++中的cout函数是一个用于标准输出的函数。
它是iostream库中的一部分,可以通过#include指令来包含这个库。
在C++中,cout函数被用于向终端打印输出。
它可以输出各种数据类型的值,如整数、浮点数、字符和字符串等。
cout函数的用法非常简单,只需将要输出的数据作为参数传递给它即可。
下面是几个关于cout函数的使用示例:1. 输出整数:```cppint num = 10;cout << "The number is: " << num << endl; // 输出:The number is: 10```在这个示例中,首先我们定义了一个整型变量num并初始化为10。
然后使用cout函数输出了一个字符串"The number is: ",接着用<<操作符连接了变量num,最后使用endl结束一行并换行。
这样就将整数num的值输出到了终端。
2. 输出浮点数:```cppfloat pi = 3.14159;cout << "The value of pi is: " << pi << endl; // 输出:The value of pi is: 3.14159 ```这个示例中,我们定义了一个浮点型变量pi并初始化为3.14159。
然后使用cout函数输出了一个字符串"The value of pi is: ",接着用<<操作符连接了变量pi。
最后使用endl结束一行并换行。
这样就将浮点数pi的值输出到了终端。
3. 输出字符:```cppchar ch = 'A';cout << "The character is: " << ch << endl; // 输出:The character is: A```在这个示例中,我们定义了一个字符变量ch并初始化为字符'A'。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
输入和输出并不是C++语言中的正式组成成分。C和C++本身都没有为输入和输出提供专门的语句结构。输入输出不是由C++本身定义的,而是在编译系统提供的I/O库中定义的。
C++的输出和输入是用“流”(stream)的方式实现的。图3.2和图3.3表示C++通过流进行输入输出的过程。
有关流对象cin、cout和流运算符的定义等信息是存放在C++的输入输出流库中的,因此如果在程序中使用cin、cout和流运算符,就必须使用预处理命令把头文件stream包含到本文件中:
#include <iostream>
尽管cin和cout不是C++本身提供的语句,但是在不致混淆的情况下,为了叙述方便,常常把由cin和流提取运算符“>>”实现输入的语句称为输入语句或cin 语句,把由cout和流插入运算符“<<”实现输出的语句称为输出语句或cout语句。根据C++的语法,凡是能实现某种操作而且最后以分号结束的都是语句。
一、输入流与输出流的基本操作
cout语句的一般格式为:
cout<<表达式1<<表达式2<<……<<表达式n;
cin语句的一般格式为:
cin>>变量1>>变量2>>……>>变量n;
在定义流对象时,系统会在内存中开辟一段缓冲区,用来暂存输入输出流的数据。在执行cout语句时,先把插入的数据顺序存放在输出缓冲区中,直到输出缓冲区满或遇到cout语句中的endl(或'\n',ends,flush)为止,此时将缓冲区中已有的数据一起输出,并清空缓冲区。输出流中的数据在系统默认的设备(一般为显示器)输出。
一个cout语句可以分写成若干行。如
cout<<"This is a simple C++ program."<<endl;
可以写成
cout<<"This is " //注意行末尾无分号
<<"a C++ "
<<"program."
<<endl; //语句最后有分号
也可写成多个cout语句,即
cout<<"This is "; //语句末尾有分号
cout <<"a C++ ";
cout <<"program.";
cout<<endl;
以上3种情况的输出均为
This is a simple C++ program.
注意不能用一个插入运算符“<<”插入多个输出项,如:
cout<<a,b,c; //错误,不能一次插入多项
cout<<a+b+c; //正确,这是一个表达式,作为一项
在用cout输出时,用户不必通知计算机按何种类型输出,系统会自动判别输出数据的类型,使输出的数据按相应的类型输出。如已定义a为int型,b为float型,c 为char型,则
cout<<a<<' '<<b<<' '<<c<<endl;
会以下面的形式输出:
4 345.789 a
与cout类似,一个cin语句可以分写成若干行。如
cin>>a>>b>>c>>d;
可以写成
cin>>a //注意行末尾无分号
>>b //这样写可能看起来清晰些
>>c
>>d;
也可以写成
cin>>a;
cin>>b;
cin>>c;
cin>>d;
以上3种情况均可以从键盘输入: 1 2 3 4 ↙
也可以分多行输入数据:
1↙
2 3↙
4↙
在用cin输入时,系统也会根据变量的类型从输入流中提取相应长度的字节。如有
char c1,c2;
int a;
float b;
cin>>c1>>c2>>a>>b;
如果输入
1234 56.78↙
注意: 34后面应该有空格以便和56.78分隔开。也可以按下面格式输入:
1 2 34 56.78↙ (在1和2之间有空格)
不能用cin语句把空格字符和回车换行符作为字符输入给字符变量,它们将被跳过。如果想将空格字符或回车换行符(或任何其他键盘上的字符)输入给字符变量,可以用3.4.3节介绍的getchar函数。
在组织输入流数据时,要仔细分析cin语句中变量的类型,按照相应的格式输入,否则容易出错。
二、在输入流与输出流中使用控制符
上面介绍的是使用cout和cin时的默认格式。但有时人们在输入输出时有一些特殊的要求,如在输出实数时规定字段宽度,只保留两位小数,数据向左或向右对齐等。C++提供了在输入输出流中使用的控制符(有的书中称为操纵符)。
需要注意的是: 如果使用了控制符,在程序单位的开头除了要加iostream头文件外,还要加iomanip头文件。
举例: 输出双精度数。
double a=123.456789012345;对a赋初值
(1) cout<<a;输出: 123.456
(2) cout<<setprecision(9)<<a;输出: 123.456789
(3) cout<<setprecision(6);恢复默认格式(精度为6)
(4) cout<< setiosflags(ios∷fixed);输出: 123.456789
(5) cout<<setiosflags(ios∷fixed)<<setprecision(8)<<a;输出: 123.45678901
(6) cout<<setiosflags(ios∷scientific)<<a;输出: 1.234568e+02
(7) cout<<setiosflags(ios∷scientific)<<setprecision(4)<<a; 输出: 1.2346e02
下面是整数输出的例子:
int b=123456;对b赋初值
(1) cout<<b;输出: 123456
(2) cout<<hex<<b; 输出: 1e240
(3) cout<<setiosflags(ios∷u ppercase)<<b;输出: 1E240
(4) cout<<setw(10)<<b<<','<<b; 输出: 123456,123456
(5) cout<<setfill('*')<<setw(10)<<b;输出: **** 123456
(6) cout<<setiosflags(ios∷showpos)<<b;输出: +123456
如果在多个cout语句中使用相同的setw(n),并使用setiosflags(ios∷right),可以实现各行数据右对齐,如果指定相同的精度,可以实现上下小数点对齐。
例3.1 各行小数点对齐。
#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
double a=123.456,b=3.14159,c=-3214.67;
cout<<setiosflags(ios∷fixed)<<setiosflags(ios∷right)<<setprecision( 2);
cout<<setw(10)<<a<<endl;
cout<<setw(10)<<b<<endl;
cout<<setw(10)<<c<<endl;
return 0;
}
输出如下:
123.46 (字段宽度为10,右对齐,取两位小数)
3.14
-3214.67
先统一设置定点形式输出、取两位小数、右对齐。这些设置对其后的输出均有效(除非重新设置),而setw只对其后一个输出项有效,因此必须在输出a,b,c之前都要写setw(10)。。