免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2218 | 回复: 5
打印 上一主题 下一主题

[C++] getline的一个问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-05 20:27 |只看该作者 |倒序浏览
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main(){
  5.         ifstream in("a.txt");
  6.         if(!in)
  7.         {
  8.                 cout<<"file is not exist"<<endl;
  9.                 return 1;
  10.         }
  11.         char str[10];
  12.         while(in){
  13.                 in.getline(str,10);
  14.                 cout<<str<<endl;
  15.         }
  16.         in.close();
  17.         return 1;
  18. }
复制代码
a.txt里面写了很多东西,为什么输出只有十个字符。循环好像没起作用????

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
2 [报告]
发表于 2016-05-06 08:48 |只看该作者
这个问题可就难了,你指定10个字符的长度,想要11个,这个估计谁都做不到。

论坛徽章:
0
3 [报告]
发表于 2016-05-06 10:29 |只看该作者
请问getline的10是指只读取十个字符还是,每次读取十个字符的意思?回复 2# VIP_fuck


   

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
4 [报告]
发表于 2016-05-06 12:29 |只看该作者
回复 3# cpxuvs


    跪求看文档

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
5 [报告]
发表于 2016-05-06 14:14 |只看该作者
标准文档上这么规定的:
basic_istream<charT,traits>& getline(char_type*s, streamsizen, char_typedelim);
……
n-1 characters are stored (in which case the function calls setstate(failbit)).

就是说,当你给的接受区满了后,就failbit

标准文档还给了个例子:
  1. #include <iostream>
  2. int main()
  3. {
  4.     using namespace std;
  5.     const int line_buffer_size = 100;
  6.     char buffer[line_buffer_size];
  7.     int line_number = 0;
  8.     while (cin.getline(buffer, line_buffer_size, '\n') || cin.gcount()) {
  9.         int count = cin.gcount();
  10.         if (cin.eof())
  11.             cout << "Partial final line"; // cin.fail()is false
  12.         else if (cin.fail()) {
  13.             cout << "Partial long line";
  14.             cin.clear(cin.rdstate() & ~ios::failbit);
  15.         } else {
  16.             count--; //Don't include newline incount
  17.             cout << "Line " << ++line_number;
  18.         }
  19.         cout << " (" << count << " chars): " << buffer << endl;
  20.     }
  21. }
复制代码

论坛徽章:
0
6 [报告]
发表于 2016-05-06 21:23 |只看该作者
明白了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP