C++中为什么有时候会出现使用cin后在再使用getchar()会没有用?
比如下面这个程序:
#include<iostream>
using namespace std;
int main(){int x;
cout<<"请输入字符个数";
cin>>x;
char *u=(char*)malloc(x*sizeof(char));
cout<<"请输入字符(小于x个,按回车结束)"<<endl;
char c;
c=getchar();
int k=0;
while(c!='\n'){
u[k]=c;
k++;
c=getchar();
}
u[k]='\0';
cout<<"您输入的代码是:"<<u<<endl;
return 0;
}
会发现输入5后程序接下来自动运行了。
其实是因为再输入5后打了一个回车;而这个回车就是被getchar()接收,因为循环条件是以回车结束所以程序自动运行下去;
也就是没有进入循环中;
为了解决这个问题我们可以室使用cin.ignore();
这个函数会忽略下一个输入字符(也就是这里的 回车键)
代码如下:
#include<iostream>
using namespace std;
int main(){
int x;
cout<<"请输入字符个数";
cin>>x;
char *u=(char*)malloc(x*sizeof(char));
cin.ignore();
cout<<"请输入字符(小于x个,按回车结束)"<<endl;
char c;
c=getchar();
int k=0;
while(c!='\n'){
u[k]=c;
k++;
c=getchar();
}
u[k]='\0';
cout<<"您输入的代码是:"<<u<<endl;
return 0;
}
运行结果:
成功解决!