c中cin的用法
- 格式:docx
- 大小:16.61 KB
- 文档页数:1
c++中cin与cout详解cin与cout一:标准输入函数cin不知道说它是个函数对还是不对,它是代表标准的输入设备--键盘。
他是属于流的,他的用法和流的用法是一样的。
也就是:cin>>变量;小小的说明一下,输入多个变量可以写在一行,如:cin>>x>>y>>z;这样写不是不允许,而是不好看,如果是不同的变量类型,那就更是没头没脑了。
除了你,人家是不知道该输入什么的,所以,一般在输入语句的前面,我们一般都要做一个提示,请输入×××,让人家心里有个底,知道这个变量是做什么的。
另外,这个函数是不用带地址符号"&"的,也不用写明变量类型,千万不要跟scanf混淆。
当然他就也不检查变量输入是否合法。
如:int i;cout<<"please input a number:"cin>>i;cout<<"i="<<i<<endl;如果你输入的是一个字符如'a'那么他也不检查,但你输出的结果不是正确的,这要是手工进行检查。
当然他也跟scanf一样,如果在循环内部输入不合法的变量值,那么也将陷入死循环。
如下:/*一个输入不合法变量陷入死循环的例子*/#include <iostream.h>main(){int i;while(i!=-1){cout<<"i="cin>>i; /*请输入不是一个字符如'a'试试*/cout<<endl;}}如上一个程序,如果你输入的不合法,那就将陷入死循环。
解决的办法有个一,把cin>>i;语句移到判断循环的语句中,那么,你输入的如果是不合法的变量,他将跳出循环。
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>>()进行读取数据。
C++基础第一章一、浅谈c in与cout1、std::cout<<"Enter two numbers: "<<std::endl;(cin类似)< p="">等价于std::cout<<"Enter two numbers: "std::cout <<std::endl;(作用另起一行,开辟一个缓存区)< p=""> <<是预定义的插入符,即cout后的表达式插入到输出流中就输出返回cout对象本身本身,因而可以向第一行那样连写>>预定义提取符,即将数据从输入流中提取出来返回为cin对象本身,因而可以cin>>表达式1>>表达式2,提取运算符连写2、scanf()输入字符串和数字:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中不会丢弃该字符)。
3、Cin标准输入(输入数字、字母、字符串):读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中不会丢弃该字符)。
4、scanf输入单个字符与cin.get()输入单个字符一样:空白字符(空格、换行、Tab)和转义字符都作为有效字符(该函数不丢弃上次输入结束时的Enter字符)5、gets()输入字符串与cin.get(array_name, Arsize)一样(实际读取的字符比Arsize少1),有效字符前的空白字符(空格、Tab)和转义字符作为有效字符处理直到再次遇到Enter,会丢弃最后的Enter字符。
cin.getline() 与cin.get(array_name, Arsize)的读取方式差不多,以Enter结束,可以接受空格字符。
cin.getline的用法
cin.getline()函数是C++中的分行输入函数,是标准库中的一个函数,它从输入流中读取数据,直到遇到换行符或者读取到一个特殊字符为止,然后将所读取的数据保存在某个字符串中。
在标准C中,它可以用来从文件中每次读取一行换行符之前的数据,它在
C++中也可以用来从标准输入流stdin中输入数据,如从终端,键盘等设备输入数据,它是和std::getline()函数一起使用的。
std::streamsize cin.getline(char *s, std::streamsize n );
参数s表示要读入的字符数组的首地址,参数n表示以字符为单位,要读入的字符的最大个数,不包含终止符。
cin.getline的返回值为int类型,读取的字符总数,不单单是换行符之前的,而是有可能包括换行符的。
此外,cin.getline()函数还可以接收键盘输入中的空格和tab字符,这在一些情况下可以更加方便的输入数据。
总之,cin.getline()函数是C++中一个非常有用的函数,可以方便快捷的从输入流中读取一行换行符之前的数据,它在C++中广泛用于文件读入,命令行处理,键盘输入等场景,是便捷的输入函数之一。
c语言中cin的用法一、概述在C语言中,cin是一个经常使用的输入流对象,主要用于从控制台或者其他设备上读取用户输入数据。
它可以接收多种类型的输入,并将其存储到相应的变量中。
本文将详细介绍cin的用法,包括如何使用cin进行基本类型输入、字符串输入以及如何处理错误输入。
二、基本类型输入1. cin与基本数据类型变量配合使用时,可以直接使用" >> "操作符将用户的输入值赋给变量。
例如,我们希望从控制台上获取一个整数并存储到变量num中:```int num;cout << "请输入一个整数:";cin >> num;```这段代码首先打印提示信息"请输入一个整数:",然后等待用户的输入。
当用户按下回车键后,程序将会从标准输入流中读取一个整数,并将其赋值给变量num。
2. 对于浮点数、字符和布尔型数据,使用cin也是类似的方式:浮点数:```float f;cout << "请输入一个浮点数:";cin >> f;```字符:```char ch;cout << "请输入一个字符:";cin >> ch;```布尔型:```bool flag;cout << "请输入一个布尔值(0/1):";cin >> flag;```三、字符串输入除了基本类型变量之外,我们还可以使用cin进行字符串的输入。
C++中没有直接支持字符串类型的变量,但我们可以使用字符数组或者string类来存储字符串。
1. 使用字符数组(C风格字符串):```char str[100];cout << "请输入一个字符串:";cin >> str;```这段代码定义了一个大小为100的字符数组str,并通过cin将用户输入的字符串存储到该数组中。
c++ cin.get()的用法小结cin.get()是C++中的一个输入函数,用于从输入流中获取一个字符。
它的用法如下:cin.get(char_variable);其中,char_variable是一个变量,用于存储获取的字符。
如果成功获取了字符,则返回输入流对象;否则,返回一个null指针。
cin.get()函数的使用需要注意以下几点:1. 处理输入缓冲区一般情况下,cin.get()函数从输入流中获取一个字符后,会将该字符放入输入缓冲区中。
如果输入缓冲区中还有其他字符,则下次调用cin.get()函数时,会优先从缓冲区中获取字符。
对于这种情况,应该使用cin.ignore()函数清空输入缓冲区。
例如,输入缓冲区中有一个回车符(\n),那么以下代码将不能正确的获取用户输入的字符:为了正确获取用户输入的字符,应该在调用cin.get()函数之前先调用cin.ignore()函数:char ch;cin.ignore();cin.get(ch);2. 处理空格和Tab键cin.get()函数默认会将空格和Tab键当做普通字符处理,如果需要处理空格和Tab键,可以使用cin.get(char_variable, max_size, stop_char)函数。
该函数有三个参数:char_variable:存储获取的字符的变量;max_size:最多读取的字符数,包括空格和Tab键;stop_char:结束读取的字符,不包括在最终读取的字符中。
例如获取一个含有空格的字符串,可以使用以下代码:char str[30];cin.get(str, 30, '\n');注意,该函数获取的字符数应该小于或等于max_size,否则会产生缓冲区溢出的问题。
3. 处理换行符换行符(\n)通常被用来表示用户输入的一个完整的行,因此在处理用户输入时,需要对换行符进行特殊处理。
可以使用以下代码读取用户输入的一行:string line;getline(cin, line);该代码中,getline()函数会从输入流中读取一行字符,包括换行符,存储在line变量中。
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)、换⾏,继续读取下⼀个字符,若缓存区为空,则等待。
转载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。
C语言printf和scanf函数详细用法注:printf,scanf 是c语言写法,<stdio.h> cout,cin是C++写法,需要导入iostream库。
printf,scanf 在输入输出时要定义好输入输出格式,而cout,cin则是根据变量的类型输入输出,不需要指定变量的输入输出类型。
printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。
在编写程序时经常会用到此函数。
printf()函数的调用格式为:printf("<格式化字符串>", <参量表>);其中格式化字符串包括两部分内容: 一部分是正常字符, 这些字符将按原样输出; 另一部分是格式化规定字符, 以"%"开始,后跟一个或几个规定字符, 用来确定输出内容格式。
参量表是需要输出的一系列参数, 其个数必须与格式化字符串所说明的输出参数个数一样多, 各参数之间用","分开, 且顺序一一对应, 否则将会出现意想不到的错误。
格式化字符串的格式是:%[标志][输出最小宽度][.精度][长度]格式字符1. 标志:标志字符为-、+、#、空格四种,其意义下表所示:标志意义- 结果左对齐,右边填空格(无,则右)+ 输出符号(正号或负号)空格输出值为正时冠以空格,为负时冠以负号 # 对c,s,d,u类无影响;对o类(8进制),在输出时加前缀o;对x类,在输出时加前缀0x;对e,g,f 类当结果有小数时才给出小数点例1:#i nclude<stdio.h>main(){int a=100;float b=123.255; 运行结果printf("a=%d ",a); a=100printf("a=%10d ",a); a= 100printf("a=%-10d ",a); a=100 //左对齐printf("a=%+d ",a); a=+100printf("a=% d ",a); a= 100 //有空格printf("a=%#o ",a); a=0144 //O类printf("a=%#x ",a); a=0x64 //x类printf("b=%#f ",b); b=123.254997 (?????)}2.输出最小宽度:用十进制整数来表示输出的最少位数。