C++中cin的使用

一 读取字符串(尽量读取字符串到string对象)

1 获取字符串到数组

1 )cin

cin
char a[20];	
cin>>a;

则cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,也就是说,cin>>a,只能获取单个单词。也即是说,从缓存中读取空白之前的单词,放在数组中,并在末尾自动添加空字符。
注:cin对于空白的处理并不是舍弃,而是跳过。空白实际上还是在缓存中。
2 )使用面向行的类成员函数:getline()和get(),都是一次读取一行字符串到数组中。

char name[20]
  • 2.1 cin.getline(name,size) 读取指定数目的字符或遇到换行符时停止读取(键盘输入的回车就是\n)。这 种方法读取整行。char name[20]; cin.getline(name,20);他不保存换行符,而是用字符串停止符代替换行符。即舍弃换行符。

  • 2.2 cin.get() : cin.get(name,20) 并不舍弃换行符,而是将其保留在缓存中。当读取两行字符串时:
    cin.get(name,arsize); //读第一行
    cin.get(); //处理换行符
    cin.get(dessert,arsize); //读取第二行

2混合输入字符串和数字(广义来讲,是先用cin<<后用cin.getline()导致的问题)

1 ) 数字只能通过int a ; cin>>a来读取。但是诸如cin>> a的形式读取数字或者字符串都会有一个问题,那就是遇到空白符就停止,并且不会舍弃空白符(空格、制表和换行)。这就会使空白符留在缓存中。当后续继续使用cin读数据时,这问题不大,因为cin会自动跳过空白符。但是当后面使用cin.get()和cin.getline()时,就会出现读取空白符的问题,当空白符是换行符时,则会直接读取导致读取停止。
2 ) 在cin之后使用cin.getline()时,要先在cin之后使用一次cin.get()来处理空白符。

3 获取字符串到string类对象

1)
string str;
cin>>str;

则cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,也就是说,cin>>str,只能获取单个单词。也即是说,从缓存中读取空白之前的单词,放在数组中,并在末尾自动添加空字符。
注:cin对于空白的处理并不是舍弃,而是跳过。空白实际上还是在缓存中。
2)
string str;
getline(cin,str); //读取一行到string类对象中

  • string类对象的大小是动态的,因此不需要设置输入的大小

3) 注:cin>>str和getline(cin,str) 与cin>>和cin.getline()获取字符串到数组的性质是一样的。

4)注:同样也要注意cin和getline()同时使用的问题。

键盘输入以及cin读取原理
键盘输入后按回车,实际上是把输入送到缓存中,cin读取数据本质是从缓存中读取所需要的数据。键盘的回车一方面是将输入送到缓存,一方面也会在缓存中留下一个换行符。

二 读取字符

1 :
char a;
cin>>a;

从缓存中读取一个字符就停止(不需要停止标志),但是自动跳过空白(空格、制表符和换行符),而我们一般认为空格等也是字符,所以这种方法有缺陷。
2:
char a;
cin.get(a);
cin.get(char)读取缓存中的下一个字符,不会跳过空白。
这种方法有时也要处理换行符。如:
char a,b;
cin.get(a);
cin.get(b);

当输入a回车时,会将回车赋值给b。解决方法是在cin.get(b)前面加一个 cin.get();

三 读取数字:只能用cin

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值