C++各种输入

1.cin.get()基本用法

(1)1个参数

用法:a = cin.get() 或者 cin.get(a)

结束条件:输入字符足够后回车

说明:这个是单字符的输入,用途是输入一个字符,把它的ASCALL码存入到a中

处理方法:与cin不同,cin.get() 在缓冲区遇到[enter],[space],[tab]不会作为舍弃,而是继续留在缓冲区中

(2)2个参数

用法:cin.get(arrayname,size) 把字符输入到arrayname中,长度不超过size

注释:arrayname必须是char[]类型,即char数组类型,不可以为string类型;size是指输入长度,即允许输入的最大长度。

处理方法:假设把数据输入到 char a[arraylength],数组长度为arraylength。cin.get(a,size)—size,arraylength不同可以分为四类:

类1:输入串长arraylength,会自动扩张arrayname大小,使能保存所有数据

例1:char a[10];cin,get(a,20);

输入:123456789012[enter]

输出a数组:123456789012 可以发现,输入12个字符到a[10]中,系统自动扩充a[10],此时实际数组长为13(‘123456789012’\0’’)。但当计算sizeof(a)时,还是现实为10

类2:输入串长

例2:char a[10];cin.get(a,20);

输入:12345[enter]

输出:12345,此时数组内数据为‘12345‘\0’’

类3:输入串长>size,先截取size个字符,若还是大于arraylength,则输入前arraylength-1个字符,最后补充‘\0’

例3:char a[5];cin,get(a,10);

输入:123456789012[enter]

输出:123456789 先截取了9个字符变成‘123456789‘/0‘’,然后放入到a中,a自动扩张长度

类4:输入串长>size,先截取size个字符,若小于arraylength,则把截取串放入数组中,最后补充‘\0’

例4:char a[15],cin.get(a,10)

输入:123456789012[enter]

输出:123456789 此时数组内为‘123456789‘\0’’ 注意:前size-1有效,最后一个补‘\0’

综上:当吧大于数组长度的字符串放出char a[arraylength]中,系统自动扩张数组a的长度使a能放得下,但是这么做容易产生运行错误。

(3)3个参数

用法:cin.get(arrayname,size,s) 把数据输入到arrayname字符数组中,当到达长度size时结束或者遇到字符s时结束

注释:a必须是字符数组,即char a[]l类型,不可为string类型;size为最大的输入长度;s为控制,遇到s则当前输入结束缓存区里的s将被舍弃。

2.cin.getline()基本用法
cin.getline() 的用法和 cin.get() 用法大致相同,没有一参数用法,只有二参数,三参数两类

cin.gerline( arrayname, size )

cin.getline( arrayname, size, s )

用法与 cin.get() 效果大致相同,但也有些区别

(1)cin.getline(arrayname,size)与cin.get(arrayname,size)的区别

cin.get(arrayname,size)当遇到[enter]时会结束目前输入,他不会删除缓冲区中的[enter]

cin.getline(arrayname,size)当遇到[enter]时会结束当前输入,但是会删除缓冲区中的[enter]

#include <iostream>
using namespace std;  

int main()  
{  
    char a[10];char b;  
        cin.get(a,10);  
    cin.get(b);  
    cout<<a<<endl<<int(b);  
}  

输入:12345[enter]

输出:12345 【换行】 10

说明:cin.get(a,10)把12345到a中,遇到[enter]结束,但是不把[enter]删除,则把[enter]输入到b中,(enter的ASCALL码为10)

include  <iostream>
using namespace std;  

int main()  
{  
    char a[10];char b;  
        cin.getline(a,10);  
    cin.get(b);  
    cout<<a<<endl<<int(b);  
}  

输入:12345[enter]a[enter]

输出:12345【换行】97

说明:cin.getline(a,10)吧12345输入到a中,遇到{enter}结束,并把缓冲区中[enter]删除,把接下来的a输入到b中

(2)cin.getline(arrayname,size,s)与cin.gei(arrayname,size,s)的区别
cin.getline( arrayname , size , s ) 当遇到s时会结束输入,并把s从缓冲区中删除

cin.get(arrayname , size , s)当遇到s时会结束输入,但不会删除缓冲区中的s。

include <iostream>
using namespace std;  

int main()  
{  
    char a[10];char b;  
    cin.get(a,10,',');  
    cin.get(b);  
    cout<<a<<endl<<b;  
}  

输入:12345,[enter]

输出:12345【换行】,

说明:cin,get不会删除缓冲区的,

include <iostream>
using namespace std;  

int main()  
{  
    char a[10];char b;  
    cin.getline(a,10,',');  
    cin.get(b);  
    cout<<a<<endl<<int(b);  
}  

输入:12345,[enter]

输出:12345【换行】10

说明:cin.getline吧12345输入到a中,遇到’,‘结束,并删除缓冲区的’,‘,后面的[enter]输入到b中

总之,cin.get() 不删,cin.getline() 删。

运用—以任何符号作为输入分隔符

例题:输入五个学生的名字,每个学生的名字不超过10个字符,输入时学生名字之间用逗号隔开,把这五个名字存储并换行输出。

include <iostream>
using namespace std;  

int main()  
{  
    char a[5][10];  
    int i;  
    for(i=0;i<4;i )  
        cin.getline(a[i],10,',');  
    cin.getline(a[i],10);  

    for(i=0;i<5;i )  
        cout<<a[i]<<endl;  
}  

这样我们就可以完成完成用任何符号作为分割符的输入了!此处getline换成get是不行的,因为cin.get不会删除缓冲区中的分隔符’,‘ 后续输入不能继续进行。

3、getline()
用法:接收一个字符串,可以接收空格并输出,需包含“#include”

include <iostream>
inlucde <string>
using namespace std;
main ()
{
string str;
getline(cin,str);
cout<<str<<endl;
}

输入:jkljkljkl
输出:jkljkljkl

输入:jkl jfksldfj jklsjfl
输出:jkl jfksldfj jklsjfl

4、注意的问题
1、cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

2、当同时使用cin>>,getline()时,需要注意的是,在cin>>输入流完成之后,getline()之前,需要通过

str=”\n”;
getline(cin,str);

的方式将回车符作为输入流cin以清除缓存,如果不这样做的话,在控制台上就不会出现getline()的输入提示,而直接跳过,因为程序默认地将之前的变量作为输入流。

看下面一段程序:

include <iostream>
include <string>
include <cstdlib>
using namespace std;

int main(){
    int age;
    //standard input(cin)
    cout<<"Please enter an integer value as your age: ";
    cin>>age;
    cout<<"Your ager is: "<<age<<".\n";
    //cin and string
    string mystr;
    cout<<"What's your name? "<<endl;
   mystr="\n";//*****
    getline(cin,mystr);//*****
    getline(cin,mystr);
    cout<<"Hello,"<<mystr<<".\n";
    char sex;
    cout<<"Please enter a F or M as your sex: ";
    cin>>sex;
    cout<<"Your sex is: "<<sex<<endl;
    cout<<"What's your favorite team? ";
    mystr="\n";//****
    getline(cin,mystr);//****
    getline(cin,mystr);
    cout<<"I like "<<mystr<<".\n";

    system("pause");
    return 0;
}

运行结果为:
《C++各种输入》

如果不添加以*注释的代码,则运行结果为:
《C++各种输入》

参考自:http://blog.csdn.net/a1015553840/article/details/50579396

    原文作者:骑士周游问题
    原文地址: https://blog.csdn.net/qq_29735775/article/details/81165882
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞