字符串读入的一点点细节

 fgets(s, sizeof(s), stdin):

一直读入到换行,换行符会读入到字符串中

因为最后有个'\0'占位,所以只能读sizeof(s)-1个字符(包括换行)


cin.getline(s, sizeof(s), '\n'):

一直读入到第三个参数指定的字符(可以省略,默认为换行),指定的终止字符会被吞掉

因为最后有个'\0'占位,所以只能读sizeof(s)-1个字符(虽然终止字符被吞掉了,但也算在里面)

当sizeof(s)-1不够读取完到终止字符的所有字符时会产生failbit,搞得自己和cin之类也不能用,需要cin.clear之后才可以正常读取。不过scanf和fgets之类又可以正常用,搞不懂为什么了,以后再慢慢研究吧……


还有用scanf("%[^\n]", s)也能读整行,不过换行符得自己单独处理


还有个就是整行读取读win造的数据时因为换行符是'\r\n',所以会多读一个'\r',有时得单独处理下(虽然好像都知道,但还是写个免得自己忘了吧


总结:用getline(cin, s)

评论

此博客中的热门博文