c++中使用getline读文件的问题
写了以下几行小程序,想实现:通过键盘录入一个句子,然后两次用getline分别读取4个字符,然后用cout将其输出,可是为什么第二个getline无法成功读取呢?大哥大姐...
写了以下几行小程序,想实现:通过键盘录入一个句子,然后两次用getline 分别读取4个字符,然后用cout将其输出,可是为什么第二个getline无法成功读取呢?大哥大姐多帮忙啊,谢谢各位了!
#include<iostream>
using namespace std;
int main()
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin.getline(ch,5);
cout<<"part 1:"<<ch<<endl;
cin.getline(ch,5);
cout<<"part 2:"<<ch<<endl;
return 0;
如果按照我的程序,part2输出的是一个空字符,如果我在第一次使用getline的时候使用cin.getline(ch,10,'/');并且我所输入的句子在9个字符以内就出现了'/'的话,part2就可以输出后面的几个字符了,可是如果9个字符以内没有出现'/',当然第一次getline就会读取9个字符,但是第二次getline却什么也读取不到了,这是为什么呢? 能否请各位解释的再详细一点呢?
能否麻烦留下个QQ一起交流一下?还有6楼的办法好像也不可以啊,多谢了啊。 展开
#include<iostream>
using namespace std;
int main()
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin.getline(ch,5);
cout<<"part 1:"<<ch<<endl;
cin.getline(ch,5);
cout<<"part 2:"<<ch<<endl;
return 0;
如果按照我的程序,part2输出的是一个空字符,如果我在第一次使用getline的时候使用cin.getline(ch,10,'/');并且我所输入的句子在9个字符以内就出现了'/'的话,part2就可以输出后面的几个字符了,可是如果9个字符以内没有出现'/',当然第一次getline就会读取9个字符,但是第二次getline却什么也读取不到了,这是为什么呢? 能否请各位解释的再详细一点呢?
能否麻烦留下个QQ一起交流一下?还有6楼的办法好像也不可以啊,多谢了啊。 展开
7个回答
展开全部
注意,getline函数是以回车作为结束符的,但它不会虑掉回车符。在第一个cin.getline(ch,5); 结束后有一个回车符保留在缓存中,当执行到第二个cin.getline(ch,5); 函数读取保留在缓存中的回车符,认为已经结束读取,所以之后输入的第二串五个字符并没有读入ch中,当然ch为空,可以用cin.get();解决这个问题;具体操作如下:
#include<iostream>
using namespace std;
int main()
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin.getline(ch,5);
cin.get();
cout<<"part 1:"<<ch<<endl;
cin.getline(ch,5);
cin.get();
cout<<"part 2:"<<ch<<endl;
return 0;
在cin.get(ch,5);后添加cin.get();就可以读取多余的回车符那么
下面的cin.getline(ch,5);就能正确读取
#include<iostream>
using namespace std;
int main()
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin.getline(ch,5);
cin.get();
cout<<"part 1:"<<ch<<endl;
cin.getline(ch,5);
cin.get();
cout<<"part 2:"<<ch<<endl;
return 0;
在cin.get(ch,5);后添加cin.get();就可以读取多余的回车符那么
下面的cin.getline(ch,5);就能正确读取
展开全部
我试了一下,应该是第一次输入小于4个的字符就好了
getline(char *ch,int n,char='\n')函数的意思是将输入n个字符赋给指针ch,当未输入n个字符而有回车的时候也结束输入。
当你第一次输入4个字符并回车后,再继续执行下一个cin.getline(ch,5); 的时候,就将该回车读入到了ch里面并结束输入,结果就看似没等你第二次输入字符程序就结束运行了。
你可以尝试将下面的程序输入4个字符单步运行看看ch的值就可以明白了
#include<iostream.h>
#include <stdio.h>
int main()
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin.getline(ch,5,'\n');
cout<<"part 1:"<<ch<<endl;
ch[0]='a';
cin.getline(ch,5,'\n');
cout<<"part 2:"<<ch<<endl;
return 0;
}
getline(char *ch,int n,char='\n')函数的意思是将输入n个字符赋给指针ch,当未输入n个字符而有回车的时候也结束输入。
当你第一次输入4个字符并回车后,再继续执行下一个cin.getline(ch,5); 的时候,就将该回车读入到了ch里面并结束输入,结果就看似没等你第二次输入字符程序就结束运行了。
你可以尝试将下面的程序输入4个字符单步运行看看ch的值就可以明白了
#include<iostream.h>
#include <stdio.h>
int main()
{
char ch[20];
cout<<"enter a sentence:"<<endl;
cin.getline(ch,5,'\n');
cout<<"part 1:"<<ch<<endl;
ch[0]='a';
cin.getline(ch,5,'\n');
cout<<"part 2:"<<ch<<endl;
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成 getline(cin,st,'s'); 即使输入的是abcsabc 那么也只会显示 abc ,因此对于上面出现的情况,getline默认情况下以回车('\n')作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。
你可以通过多读一次char的方法放掉这个回车符。这个在C++编程思想里有很详细的解释,你可以找来看看的。
120321077
你可以通过多读一次char的方法放掉这个回车符。这个在C++编程思想里有很详细的解释,你可以找来看看的。
120321077
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你输入完整个句子后才执行第一个cin.getline(ch,5);
当执行完cout<<"part 1:"<<ch<<endl;后第二个cin.getline(ch,5);
还要等待输入 这么做就需要两次输入了吧
当执行完cout<<"part 1:"<<ch<<endl;后第二个cin.getline(ch,5);
还要等待输入 这么做就需要两次输入了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一次输入小于等于4个字符就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询