注意,getline函数是以回车作为结束符的,但它不会虑掉回车符。在第一个cin.getline(ch,5); 结束后有一个回车符保留在缓存中,当执行到第二个cin.getline(ch,5); 函数读取保留在缓存中的回车符,认为已经结束读取,所以之后输入的第二串五个字符并没有读入ch中,当然ch为空,可以用cin.get();解决这个问题;具体操作如下:
#include
using namespace std;
int main()
{
char ch[20];
cout<<"enter a sentence:"<
cin.get();
cout<<"part 1:"<
cin.get();
cout<<"part 2:"<
在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
#include
int main()
{
char ch[20];
cout<<"enter a sentence:"<
cout<<"part 1:"<
cin.getline(ch,5,'\n');
cout<<"part 2:"<
}
因为getline有三个参数,第三个参数是字符串的结束符,也就是当getline遇到这个结束符时,就不在接受输入了,比如写成 getline(cin,st,'s'); 即使输入的是abcsabc 那么也只会显示 abc ,因此对于上面出现的情况,getline默认情况下以回车('\n')作为结束符,第一次按回车表示字符串结束,第二次按回车才开始输出。
你可以通过多读一次char的方法放掉这个回车符。这个在C++编程思想里有很详细的解释,你可以找来看看的。
120321077
因为你输入完整个句子后才执行第一个cin.getline(ch,5);
当执行完cout<<"part 1:"<
一次输入小于等于4个字符就好了