c++读取整行的方法,cin.getline 与 getline 用法的区别

string s;
getline(cin, s);
cout << s << endl;
char s[100];
scanf("%[^\n]%*c", s);
printf("%s\n", s);

char s[100];
gets(s);
printf("%s\n", s);
char s[100];  
cin.get(s,100);
printf("%s\n", s);
char s[100];
cin.getline(s, 100);
printf("%s\n", s);

下面介绍 cin.get()cin.getline() 的区别:

可分为三种情况来看:
1. 输入的字符串不超过限定大小
  get(str,Size):读取所有字符,遇到’\n’时止,并且将’\n’留在输入缓冲区中,其将被下一个读取输入的操作捕获,影响该输入处理
  getline(str,Size):读取所有字符,遇到’\n’时止,并且将’\n’直接从输入缓冲区中删除掉不会影响下面的输入处理。

2. 输入的字符数超出限定的大小
  get(str,Size):读取Size-1个字符,并将str[Size-1]置为’\0’,然后将剩余字符(包括’\n’)留在输入缓冲区中,这些字符将被下一个读取输入的操作捕获影响该输入处理
  getline(str,Size):读取Size-1个字符,并将str[Size-1]置为’\0’,剩余字符(包括’\n’)留在输入缓冲区中,随即设置cin实效位(即if(!cin)的判断为真),关闭输入。其后的所有输入都无法得到任何东西,当然也无法得到输入缓冲区中剩余的字符串。但如果象本例一样用clear()重置cin,其后的输入便可用并会得到遗留在输入缓冲区中的字符。

3. 输入一个空行(即直接回车)
  get(str,Size):str将得到’\0’,并设置cin实效位,关闭输入,但回车依然留在输入缓冲区中,因此如果我们用clear()重置cin,其下一个读取输入的操作将捕获’\n’;
  getline(str,Size):str将得到’\0’,并将’\n’删除掉,不置实效位,不关闭输入。所以对于cin.getline来说空行是合法的输入,且不会影响下面的输入处理。

  至于使用那个更好,可能因人习惯不同而不同,仁者见仁智者见智。对于我们编程来说,总希望能有更好的容错性,即便用户输入了不合理的输入,程序也应该能够 提示并能够重新输入或继续正常处理,而因为用户的输入问题而导致程序错误或其后的所有输入都不可用显然不是我们希望的。使用get(str,Size)和 getline(str,Size),都可能碰到设置失效位,关闭输入的情况,故都是需要考虑到相应的防错处理的。

以上来自:https://zhidao.baidu.com/question/362328053.html

cin.getline()getline()的区别

cin.getline()是输入流对象的成员函数
getline()是string类的成员函数

cin.getline(str,Size)

  cin.getline()在使用的时候,必须传入字符数组,并且还需要指定字符数组的长度

  实际是cin.getline()(接收字符串到m,接收个数n,结束字符)。接收一个字符串,可以接收空格等,最后一个字符为‘\0’。结束符可以通过设置第三个参数自己设置,默认是回车。m不能为string类型。

注意:实际接收到的要比n少一个,因为最后一个字符为’\0’。

getline(cin,str)

用于string类的。使用需包含头文件#include。getline(cin,string s),接收一个字符串,可以接收空格、回车等

cin.getline()的区别:1. cin.getline()接收输入字符串的是数组,getline()是string类型。
           2. cin.getline()可以接收空格,但不能接收回车;getline()可以接收空格和回车
           3. cin.getline()如果没有设置第三个参数(结束条件)会在数组结尾是’\0’,但getline()不会

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值