使用getline()函数 输入一个string类的变量出现string subscript out of range

tangbenze 2011-03-15 06:22:40
int BookRecord::setrecord () {
string s;
getline(cin,s); if (s[0]>='A'&&s[0]<='Z') {
int i=s.find(';');
book_id=s.substr(0,i);
int j=s.find(';',i+1);
book_title=s.substr(i+1,j-i-1);
i=s.find(';',j+1);
name=s.substr(j+1,i-j-1);
j=s.find(';',i+1);
if (j-1-i!=4||(s[i+1]!=1&&s[i+1]!=2))
return 0;
year_published=s.substr(i+1,j-i-1);
num_of_copies=0;
int n=s.size()-1-j;
for (int k=0;k<n;k++) {
num_of_copies*=10;
num_of_copies+=s[j+1]-'0';
j++;
}
num_of_copiesavailable=num_of_copies;
return 1;
}
else return 0;
}
我写下上面这个函数后在运行时出现错误,提示string subscript out of range !
这是什么原因,找了好久没弄明白,求助~
...全文
578 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangbenze 2011-03-15
  • 打赏
  • 举报
回复
明白了,因为我在使用getline()函数之前使用过cin输入过一个数,输入时最后留有一个'\n'符号在缓冲区,所以在使用getline()时自动把'\n'读进去了,导致s成为一个空串,下面的也就无法运行了。只要在getline()之前在用一个getchar()函数处理掉'\n'就行了。
delphiwcdj 2011-03-15
  • 打赏
  • 举报
回复
getline(cin,s);后面在添加
string tmp;
getline(cin,tmp);
看下前面s中的内容
tangbenze 2011-03-15
  • 打赏
  • 举报
回复
补充:单步调试的时候,程序走到我标红的那一步时控制台没反应,就是说没办法输入,再按f10时到下一步就出错了。。
之苒 2011-03-15
  • 打赏
  • 举报
回复
这个getline函数使用是正确的啊,应该不是这里的问题吧
delphiwcdj 2011-03-15
  • 打赏
  • 举报
回复
单步调试一下吧,你的代码不全也不好帮你看
bdmh 2011-03-15
  • 打赏
  • 举报
回复
下标越界,记住下标从0开始,查一下吧

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧