博文

目前显示的是 十月, 2022的博文

字符串读入的一点点细节

 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)