【C/C++】记录下gets,cin.getline清除换行方式

竞赛中经常出现:

输入格式

  第1行:1个n,表示指令数量
  第2..n+1行:每行给出一条指令。指令序列xxxxxxxx

嗯 没错,然后一般就很多直接撸出了如下代码:

int length=0;

char* inputText=(char*)malloc(xLength);

cin>>length;

for(int i=0;i<length;i++){

cin.getline(inputText,length);

...

或纯C操作, 

int length=0;

char* inputText=(char*)malloc(xLength);

scanf(%d,&length);

for(int i=0;i<length;i++){

gets(inputText);

...

这样,就会出现少了一行的情况,这是因为前面的输入流在用户输入的时候还存有一个回车换行符,下面的第一个gets或者getline则会把这个空数据的符号也读作一行,从而造成了少一行的情况。

解决方案:

纯C:

scanf()后使用getchar()吸收一个换行符

int length=0;

char* inputText=(char*)malloc(xLength);

scanf(%d,&length);

getchar();//吸收换行大法

for(int i=0;i<length;i++){

gets(inputText);

...

 C++中的STL库则使用cin.ignore()忽略前面的数据流,这里忽略,即前面的那个换行符

int length=0;

char* inputText=(char*)malloc(xLength);

cin>>length;

cin.ignore();//这也吸收。(cin.ignore()还有其他参数,具体用法可参考百度或者msdn,这里只是竞赛中可常用的一种方法。请勿当作标准)

for(int i=0;i<length;i++){

cin.getline(inputText,length);

...

经过以上处理一般就可以达到我们竞赛中题目要求输入的效果啦。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值