cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
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的用法
cin.getline(a,20);
cin.getline(a,20,'\n');
cin.getline(a,20,'Q');
当多维数组时候:
char a[3][20];
for(int i=0;i<3;i++)
{
cin.getline(a[i],20);
streambuf* buf;
cin.clear();
buf = cin.rdbuf(); //cin.rdbuf()获得指向输入流缓冲区的指针
buffer = new char(buf->in_avail()); //buf->in_avail()获取缓冲区大小,new char(buf->in_avail())开辟一块输入流缓冲区大小的内存。
C++ cin,cin.get(),cin.getline(),getline(),gets(),getchar()函数的用法(2011-08-05 14:40:55)
1)cin //可接受多个输入值。输入时候:用空格或回车键间隔
最普通的用法:输入数字。
例如:int a,b; cin>>a>>b; cout<<a+b;
using namespace std;
int main()
{
string str;
getline(cin,str);
cout<<str;
}
//getline有三个参数,第三个参数是字符串结束符,默认以'\n'为结束符。如果输入abc,那么需要按两个回车键才能显示abc,第一次回车键表示字符串结束,第二次回车才输出。
cin.getline的用法
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输⼊的多种⽅法详解⽬录前⾔⼀、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<<"\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个字符串:
using namespace std;
main ()
{
char m[20];
cin.getline(m,5); //与上面基本相同。
cout<<m<<endl;
}
输入:jkljkljkl
输出:jklj
接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;
6、getchar() //接受一个字符,需包含“#include<string>”
#include<iostream>
#include<string>
using namespace std;
main ()
{
char ch;
ch=getchar(); //不能写成getchar(ch);
这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误;
C++输入语句cin get区别
cin,cin.get(),cin.getline()区别与前一节中提到的scanf函数一样,程序的输入都建有一个缓冲区,即输入缓冲区。
一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据。
正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入,这就是例子中为什么会出现输入语句失效的原因!二.1.cin>>:(1)该操作符是根据后面变量的类型读取数据。
输入结束条件:遇到Enter、Space、Tab键。
(这个很重要!)对结束符的处理:丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)(2)程序示例:(读字符串的情况)#include <iostream>using namespace std;int main(){char str1[10], str2[10];cin>>str1;cin>>str2;cout<<str1<<endl;cout<<str2<<endl;return 0;}测试一输入:abcd[Enter]efgh[Enter]输出:abcdefgh【分析】输入遇到回车符结束,很正常。
测试二输入:abcdefghabcdefgh【分析】第一次读取字符串时遇到空格则停止了,将abcd读入str1,并舍弃了空格,将后面的字符串给了第二个字符串。
这证明了cin读入数据遇到空格结束;并且丢弃空格符;缓冲区有残留数据室,读入操作直接从缓冲区中取数据2.cin.get():(1)该函数有三种格式:无参,一参数,二参数即cin.get(), cin.get(char ch), cin.get(array_name, Arsize)读取字符的情况:输入结束条件:Enter键对结束符处理:不丢弃缓冲区中的Entercin.get() 与cin.get(char ch)用于读取字符,他们的使用是相似的,即:ch=cin.get() 与cin.get(ch)是等价的。
cin.getline()函数用法
cin.getline()函数用法getline函数是一个比较常见的函数。
根据它的名字我们就可以知道这个函数是来完成读入一行数据的。
现在对getline函数进行一个总结。
下面是一个简单的实现方式:激活代码int getline_(char s[],int lim){int c,i;i=0;while((c=getchar())!=eof&&c!='\n'&&i<lim-1)s[i++]=c;s[i]='\0';return i;}复制代码下面就是一个直观的测试程序:复制代码int test1(){char s[];while((len=getline_(s,))>0)printf("%s\n",s);return 0;}激活代码但是这个实现是有问题的,就是遇到空行的时候也会停止的。
为了化解这个问题,我们须要重新考虑while循环的推论条件。
在上面的实现中,我们是遇到eof和换行'\n'的时候都停止 ,然后通过判断所读到的字符串的长度是否大于0来判断是否结束。
为了能够初始化空行,我们须要推论一下与否初始化的就是结尾eof,如果不是就稳步加载就可以了。
还有一点,eof是什么?eof就是c语言中为了区分有效率数据和输出结束符的。
c语言采用的解决办法是:在没有输入时getchar函数将返回一个特殊值,这个特殊值与任何实际字符都不同。
这个值成为eof(end of file ,文件结束)。
我们在声明变量c 的时候,必须让它大到足以存放getchar函数返回的任何值。
之所以不把c声明成char 类型,是因为它必须足够大,除了能存储任何可能的字符外还要能存储文件结束符eof。
eof的输出由系统瞄准。
windows下就是ctrl+z,linux/unix下就是ctrl+d。
复制代码int getline2_(char s[],int lim){int c,i;i=0;while((c=getchar())!=eof&&c!='\n'&&i<lim-1)s[i++]=c;if(c==eof&&i==0)return -1;s[i]='\0';return i;}激活代码如果是文件结尾(c==eof&&i==0)的话,我们就返回-1,通过判断返回值是否为-1来决定是否继续入输入:激活代码int test1(){char s[];while((len=getline2_(s,))!=-1)printf("%s\n",s);return 0;}复制代码这样话就可以恰当初始化所有的输出了。
cin.get()函数用法
cin.get()函数用法cin.get()是一个用于读取用户输入的函数,它可以读取一个字符或多个字符,并将其存储到指定的字符数组中。
cin.get()函数有几种用法,下面将详细介绍这些用法。
1. 读取一个字符读取一个字符的cin.get()函数写法如下:```cppchar ch;cin.get(ch);```此时,程序会等待用户输入一个字符,并将该字符存入变量ch中。
注意,cin.get()函数会读取包括空格和回车在内的所有字符。
如果需要读取用户输入的一个单词或一个字符串,可以使用cin>>运算符或者getline()函数。
2. 读取多个字符读取多个字符的cin.get()函数写法如下:```cppchar str[20];cin.get(str, 20);```此时,程序会等待用户输入一串字符,最多可以输入19个字符(最后一个字符留给'\0')并将其存入字符数组str中。
也就是说,第二个参数规定了存储输入字符的字符数组的大小,应该留一个字符空间用于存放'\0'(空字符),表示字符串的结束。
3. 读取指定个数字符读取指定个数字符的cin.get()函数写法如下:```cppchar str[20];cin.get(str, 4);```此时,程序会等待用户输入4个字符,并将这些字符存入字符数组str中。
如果用户输入的字符个数小于4,程序在读取完全部已输入字符后继续等待用户输入。
4. 吸收多个连续的回车符吸收多个连续的回车符的cin.get()函数写法如下:```cppchar ch;cin.get(ch);cin.ignore(100, '\n');```在上述代码中,cin.get()函数读取用户输入的第一个字符,而cin.ignore()函数则用于吸收连续的回车符。
在读取用户输入的字符时,如果用户多次按下Enter键,这些回车符可能会对后面的程序造成影响。
C++中用cin方式获取输入的几种常用方式
C++中⽤cin⽅式获取输⼊的⼏种常⽤⽅式⼀、前⾔ 在C++程序的编写过程中,可能会经常⽤到cin⽅式⽤来捕获输⼊设备的输⼊信息。
细分的话,主要的⽅式有:cin>>、cin.get、cin.getline。
在借助键盘等字符输⼊设备进⾏输⼊的时候,如果键⼊Enter(\r)才会把⽬标字符输⼊到缓存区,,键⼊的'\r'会被转换成⼀个'\n',这个换⾏符同样也会被输⼊到缓存区,当做⼀个键⼊字符来处理。
参考资料:⼆、测试环境 Win10 + Visual Studio 2017 + Debug (x86)三、cin>>⽅式 可以从输⼊设备连续提取输⼊信息,其中,可以作为分格符使⽤的有Tab、空格(Space),换⾏符是⽤作结束符使⽤。
1 #include "pch.h"2 #include <iostream>3 #include <string>4 #include <vector>56using namespace std;78int main(void) {9string str;10while (cin >> str) {11 cout << str << '\n' << endl;12 }13return0;14 } 测试结果如下【输⼊:orange[Space]juice[Tab]orange[Enter]】。
1 orange juice orange2 orange34 juice56 orange 这种⽅式下的str,经过调试发现,并不会在最后出现截⽌符‘\0’。
(1)、cin>> 等价于cin.operator>>(),调⽤成员函数operator>>()进⾏数据的读取; (2)、当cin>>⽅式从缓存区读取数据时,会⾃动忽略作为第⼀个字符存在的Tab、空格(Space)、换⾏,继续读取下⼀个字符,若缓存区为空,则继续等待。
C++输入函数的用法
C++输入函数的用法1、cin2、cin.get()3、cin.getline()4、getline()5、gets()6、getchar()附:cin.ignore();cin.get()//跳过一个字符,例如不想要的回车,空格等字符1、cin>>用法1:最基本,也是最常用的用法,输入一个数字:#include <iostream>using namespace std;main (){int a,b;cin>>a>>b;out<<a+b<<endl;}输入:2[回车]3[回车]输出:5注意:>> 是会过滤掉不可见字符(如空格回车,TAB 等)cin>>noskipws>>input[j];//不想略过空白字符,那就使用 noskipws 流控制用法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流,是不一样的两个函数。
cin的详细用法
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");return 0;}在屏幕中一次输入:a[回车]11[回车]5.56[回车],程序将输出如下结果:注意:(1)cin>>等价于cin.operator>>(),即调用成员函数operator>>()进行读取数据。
c中cin的用法
c中cin的用法C++中cin的用法概述:C++是一种流行且功能强大的编程语言,它提供了许多输入和输出操作的方式。
其中,cin是C++标准库中用于从标准输入设备(通常是键盘)读取数据的对象。
cin使得我们能够与用户进行交互,并从控制台获取输入。
一、基本用法1. 初始化cin在使用cin对象之前,我们需要包含iostream头文件,并初始化cin对象。
#include <iostream>using namespace std;int main() {// 代码逻辑return 0;}2. 从控制台读取数据通过向变量提供值,我们可以使用“>>”运算符将输入存储到变量中。
例如,要求用户输入一个整数并存储到变量num中,可以使用如下代码:int num;cout << "请输入一个整数:";cin >> num;在此示例中,程序会显示“请输入一个整数:”,然后等待用户的输入。
用户在按下回车键后,所输入的值将会存储在num变量中。
3. 处理不同类型的输入除了整数外,我们还可以使用cin读取其他各种数据类型。
下面是一些常见数据类型的示例:// 读取float类型数据float f;cout << "请输入一个浮点数:";cin >> f;// 读取char类型数据char c;cout << "请输入一个字符:";cin >> c;// 读取字符串string str;cout << "请输入一个字符串:";cin >> str;在以上示例中,通过适当的定义和>>运算符,我们可以将输入存储为所需的数据类型。
二、处理输入错误1. 错误输入处理当用户提供了与试图读取的数据类型不匹配的输入时,cin会出现问题。
C++字符串输入详解!
C++字符串输⼊详解!C++中常见的⼏种输⼊字符串的⽅法如下:cin、cin.get()、cin.getline()、getline()、gets()、getchar()1. cin>>⽤法⼀:最常⽤、最基本的⽤法,输⼊⼀个数字:#include <iostream>using namespace std;int main (){int a,b;cin>>a>>b;cout<<a+b<<endl;}输⼊:2[回车]3[回车]输出:5⽤法⼆:接受⼀个字符串,遇“空格”、“Tab”、“回车”都结束#include <iostream>using namespace std;int main (){char a[20];cin>>a;cout<<a<<endl;}输⼊:jkljkljkl输出:jkljkljkl输⼊:jkljkl jkljkl //遇空格结束,所以不能输⼊多个单词输出:jkljkl2. cin.get()⽤法⼀:cin.get(字符变量名)可以⽤来接收字符#include <iostream>using namespace std;int main (){char ch;ch=cin.get(); //或者cin.get(ch);只能获取⼀个字符cout<<ch<<endl;}输⼊:jljkljkl输出:j⽤法⼆:cin.get(字符数组名,接收字符数)⽤来接收⼀⾏字符串,可以接收空格#include <iostream>using namespace std;int main (){char a[20];cin.get(a,20); //有些类似getline。
可以输⼊多个单词,中间空格隔开。
cout<<a<<endl;}输⼊:jkl jkl jkl输出:jkl jkl jkl输⼊:abcdeabcdeabcdeabcdeabcde (输⼊25个字符)输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')⽤法三:cin.get(⽆参数)没有参数主要是⽤于舍弃输⼊流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数⽬)的不⾜. #include <iostream>using namespace std;int main( ){char arr[10];cin.get(arr,10);cin.get();//⽤于吃掉回车,相当于getchar();cout<<arr<<endl;cin.get(arr,5);cout<<arr<<endl;system("pause");return0;}输⼊abcdefghi输出abcdefghi输⼊abcde输出abcd#include <iostream>using namespace std;int main( ){char arr[10];cin.get(arr,10);//cin.get();//⽤于吃掉回车,相当于getchar(); 现在把这⾏注释掉试试看cout<<arr<<endl;cin.get(arr,5);cout<<arr<<endl;system("pause");return0;}输⼊abcdefghi输出abcdefghi3.cin.getline()cin.getline() // 接受⼀个字符串,可以接收空格并输出#include <iostream>using namespace std;int main (){char m[20];cin.getline(m,5); //与上⾯基本相同。
c++中cincout与scanfprintf的区别比较
c++中cincout与scanfprintf的区别⽐较cin 、cout 基本说明: cin代表标准输⼊设备,使⽤提取运算符 ">>" 从设备键盘取得数据,送到输⼊流对象cin中,然后送到内存。
cin是输⼊流,cout是输出流,重载了">>"、"<<"运算符,包含在头⽂件<iostream>中。
先把要输出的东西存⼊缓冲区,再输出,导致效率降低,cin是⾃动判断你的变量类型,⽐如⼀个char数据只能⽤默认的char⽅法取数据。
scanf 、printf基本说明: scanf是格式化输⼊,printf是格式化输出,包含在头⽂件<stdio.h>中。
因为scanf是⽤指针操作的,没有类型安全机制,⽐如⼀个char类型数据你就可以⽤%f获得输⼊,⽽不会报错,但在运⾏时会出现异常。
scanf()函数取数据是遇到回车、空格、TAB就会停⽌,如例1,第⼀个scanf()会取出"Hello",⽽"world!"还在缓冲区中,这样第⼆个scanf会直接取出这些数据,⽽不会等待从终端输⼊。
例1:#include <stdio.h>int main(){ char str1[20], str2[20]; scanf("%s",str1); printf("%s\n",str1); scanf("%s",str2); printf("%s\n",str2); return 0;}测试⼀输⼊:Hello world!输出:Helloworld!第⼀个scanf()会取出"Hello",⽽"world!"还在缓冲区中,这样第⼆个scanf会直接取出这些数据,⽽不会等待从终端输⼊。
cin作为判断条件时(关于cin的理解)
cin作为判断条件时(关于cin的理解)关于cincin是istream类的对象,它是从标准输⼊设备(键盘)获取数据,(此外,cout是流的对象,即ostream类的对象,cerr是标准错误输出流的对象,也是ostream 类的对象。
这⾥的标准输出和标准错误输出指的是终端的屏幕) 程序中的变量通过流提取符">>"从流中提取数据。
流提取符">>"从流中提取数据时跳过输⼊流中的空格、tab键、换⾏符等空⽩字符。
注意:只有在输⼊完数据再按回车键后,该⾏数据才被送⼊键盘缓存区,形成输⼊流,提取运算符">>"才能从中提取数据。
需要注意保证从流中读取数据能正常运⾏。
例如:int a,b;cin>>a>>b; 若从键盘中输⼊21 abc回车,变量a从输⼊流中提取整数21,提取操作成功,此时cin流出于正常状态。
但在变量b准备提取⼀个整数时,遇到了字母a,显然提取操作失败了,此时,cin流被置为出错状态。
只有在正常状态,才能从输⼊流中提取数据。
字符输⼊的流成员函数 除了可以⽤cin输⼊标准类型的数据外,还可以⽤istream类流对象的⼀些成员函数,实现字符的输⼊。
如cin.get(),cin.getline(字符数组(或字符指针),字符个数n,终⽌标志字符)eof函数 eof是end of file 的缩写,表⽰“⽂件结束”。
从输⼊流读取数据,如果到达⽂件末尾(遇到⽂件结束符),eof函数值为⾮零值(表⽰真),否则为0(表⽰假)。
peek函数 peek是观察的意思,peek函数的作⽤是观测下⼀个字符。
调⽤形式为c=cin.peek();putback函数 调⽤形式为cin.putback(ch) 其作⽤是将前⾯⽤get或者getline函数从输⼊流中读取的字符ch返回到输⼊流,插⼊到当前指针的位置,供后⾯读取。
C++011在字符串输入中cin,cin.getline()和cin.get()函数的应用
在字符串输入中,常用到cin,cin.getline()和cin.get()函数。
cin>>通常只能读取一个单词。
cin.getline()和cin.get()可以读取固定长度的字符串,含空格等符号。
一、使用cin函数由于cin通过空格、制表符、换行符来界定字符串的。
故cin在获取字符时只读取一个单词长度,对于有空格的字符串其空格后面字符读不了。
例如:读取姓名#include <iostream>using namespace std;int main() {const int size=20;char name[size];char add[size];cout<<"enter name:"<<endl;cin>>name;cout<<"enter address:"<<endl;cin>>add;cout<<"your name is "<<name<<" and your address is "<<add<<endl;return 0;}运行结果:该运行结果不是用户所需的结果。
故需要用下面的表示方法。
二、使用cin.getline()函数。
(1)使用cin.getline()函数。
cin.getline(name,size)函数,第一个参数表示数组名,传递的是字符串首地址,第二个参数是字符长度,包括最后一个空字符的长度,因此只能读取size-1个字符。
使用该函数读取字符串代码如下:#include <iostream>using namespace std;int main() {const int size=20;char name[size];char add[size];cout<<"enter name:"<<endl;cin.getline(name,size);cout<<"enter address:"<<endl;cin.getline(add,size);cout<<"your name is "<<name<<" and your address is "<<add<<endl;return 0;}运行结果:正确。
cin.getline()和gets()的区别大全
cin.getline()和gets()的区别⼤全问题⼀:#include <iostream>#include <string>using namespace std;void main(void){string st ;cout<<"Input st:";getline(cin,st);cout<<st<<endl;}上⾯这段代码,如果输⼊abc,那么需要按两次回车键才能显⽰abc(在VC6中),因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输⼊了,⽐如写成 getline(cin,st,'s'); 即使输⼊的是abcsabc 那么也只会显⽰ a如果你输⼊abc(回车)abc,那么程序会显⽰abc,可见回车的确是函数默认的结束符。
同理1getline(cin,candybar[i].pinpai); 就是当输⼊⼀串字符串后赋值给candybar[i].pinpai,然后再按⼆次回车才显⽰在屏幕上!问题⼆:1.cin.getline是读⼊⼀⾏字符,⽐如:#include <iostream.h>void main(){char str[20];cout<<"Input :";cin.getline(str,20);cout<<str<<endl;}当输⼊:abd cdrasdf g的时候就会输出:abd cdrasdf g。
2.cin.get()第⼀个⽤法,是读⼊⼀个字符。
#include <iostream.h>void main(){char str;cout<<"Input :";str=cin.get();cout<<str<<endl;}当你输⼊“ABAF”的时候,只会显⽰“A”,因为只读⼊了⼀个字符(空格也可以读⼊)。
getline的用法
getline的用法简介getline()是C++标准库中的一个函数,用于从输入流中读取一行数据。
它可以读取以换行符结尾的字符串,并将其存储在指定的变量中。
语法getline(istream& is, string& str, char delim);•is:输入流对象,通常为cin•str:用于存储读取到的字符串的变量•delim:可选参数,指定分隔符,默认为换行符\n示例#include <iostream>#include <string>using namespace std;int main() {string line;cout << "请输入一行字符串:" << endl;getline(cin, line);cout << "您输入的字符串是:" << line << endl;return 0;}运行示例程序后,会提示用户输入一行字符串。
用户输入完成后,程序会将用户输入的字符串打印出来。
特性1. 读取一行数据getline()函数会从输入流中读取一行数据。
它会一直读取字符直到遇到换行符(默认分隔符)或者达到流末尾。
读取到的数据会存储在指定的变量中。
2. 存储至字符串变量读取到的数据会存储在一个字符串变量中。
这个变量需要作为参数传递给getline()函数,并且需要使用引用传递(即传递变量的地址)。
3. 自定义分隔符除了默认的换行符分隔符,getline()函数还可以接受一个可选的分隔符参数。
这个参数可以是单个字符或者字符串。
当遇到指定的分隔符时,getline()函数会停止读取数据。
例如,可以使用空格作为分隔符来读取一行中的第一个单词:#include <iostream>#include <string>using namespace std;int main() {string line;cout << "请输入一行字符串:" << endl;getline(cin, line, ' ');cout << "您输入的字符串的第一个单词是:" << line << endl;return 0;}4. 处理空行如果输入流中存在空行(只包含换行符),getline()函数会将空行存储在指定的变量中,并返回一个空字符串。
字符输入函数总结
字符输⼊函数总结⼀、 cin >>1. 接收⼀个字符1int main() {2char c;3 cin >> c;4 cout << c << endl;56return0;7 }2. 接收⼀个字符串(以空格、Tab、回车结束)1int main() {2char c[10];3string str;4 cin >> c;5 cin >> str;6 cout << c << endl;7 cout << str << endl;89return0;10 }输出样例aldgjdlg dlfasdgjlaldgjdlgdlfasdgjl⼆、 cin.get()1. 接收⼀个字符1int main() {2char c;3 cin.get(c);4//c = cin.get(),两种⽅式均可5 cout << c << endl;67return0;8 }2. cin.get(字符数组名,接收字符数⽬) 允许接收空格1int main() {2char c[10];3 cin.get(c, 10);4 cout << c << endl;56return0;7 }输出样例addaadda//接收字符在范围内的情况adg adagfgfhgshgadg adagf//超出范围,接收9个字符,还有⼀个'\0'3. cin.get() 舍弃输⼊流中的多余字符,作⽤类似于cin.ignore();有关 cin.ignore() 的知识可查看之前的博⽂——三、 cin.getline()1. cin.getline(字符数组名,接收字符数⽬, (结束字符))类似于之前 cin.get() 的第⼆种⽤法,不过多了⼀个结束字符的参数;1int main() {2char c[10];3 cin.getline(c, 10);4 cout << c << endl;56return0;7 }注:接收字符数⽬可以更改,只要不超过字符数组⼤⼩;结束字符默认是 '\0' ,传⼊不同的值可以变更;输出样例adfadfadfadf//在字符长度内的情况aldjgdaadjadgdaldjgdaad//输⼊多出的情况,9个字符,最后还有⼀个'\0'abcaaaaab//传⼊第三个参数为'c'的情况四、 getline()1. 接收⼀个字符串,针对于string类型使⽤,需添加头⽂件<string>1int main() {2string str;3 getline(cin, str);4 cout << str << endl;56return0;7 }注:cin.getline() 和 getline() 是两个完全不同的函数,分属于<iostream> 和 <string> 两个头⽂件中,不要混淆!五、 gets()1. 接收⼀个字符串,可包含空格本函数可以⽆限读取,不会判断上限,所以应该确保缓存空间⾜够⼤,以便在执⾏读操作时不发⽣溢出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【原创】cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息;
1、cin
1、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 //遇空格结束
输出:jkljkl
2、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]的值:kskr3
4、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
//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;
有什么建议可以一起探讨,我的email是
原文地址:/kskr/blog/item/cb00cc3deadf45c49f3d6279.html。