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

时间:2022-03-29 06:55:49

 有没有这样的经历,用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了~