acm使用gets()需要注意的问题

 有没有这样的经历,用gets会稀里糊涂的wa, 但是用scanf又对了

 windows的换行符是\r\n,linux的换行符只有\n,在windows系统下用gets会吞掉每一行最后面的\r\n,但是linux下用gets只会吞掉最后一个\n 
 那么问题来了,如果数据是在windows环境下构造的,换行符用的是\r\n,但是服务器是linux,管理员直接把windows下生成的数据没经过任何处理就移动到了linux的服务器里 ,
 那么在oj的测评时,每一行的最后都会多一个\r,所以有时候会稀里糊涂的wa
所以,这里的gets()的使用一定要注意,能不用就不用,但是这里也有一种处理方法
bool safe_gets(char *S){
	int n = strlen(S);
	if(!gets(S)) return false;
	if(n && S[n - 1] =='\r') S[n - 1] = 0;
	return true;
}
用safe_gets去代替以前的gets,这样就完美解决了这个问题了,再也不用担心用get会wa了~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值