【C/C++】记录下gets,cin.getline清除换行方式

竞赛中经常出现:

输入格式

  第1行:1个n,表示指令数量
  第2..n+1行:每行给出一条指令。指令序列xxxxxxxx

嗯 没错,然后一般就很多直接撸出了如下代码:

int length=0;

char* inputText=(char*)malloc(xLength);

cin>>length;

for(int i=0;i<length;i++){

cin.getline(inputText,length);

...

或纯C操作, 

int length=0;

char* inputText=(char*)malloc(xLength);

scanf(%d,&length);

for(int i=0;i<length;i++){

gets(inputText);

...

这样,就会出现少了一行的情况,这是因为前面的输入流在用户输入的时候还存有一个回车换行符,下面的第一个gets或者getline则会把这个空数据的符号也读作一行,从而造成了少一行的情况。

解决方案:

纯C:

scanf()后使用getchar()吸收一个换行符

int length=0;

char* inputText=(char*)malloc(xLength);

scanf(%d,&length);

getchar();//吸收换行大法

for(int i=0;i<length;i++){

gets(inputText);

...

 C++中的STL库则使用cin.ignore()忽略前面的数据流,这里忽略,即前面的那个换行符

int length=0;

char* inputText=(char*)malloc(xLength);

cin>>length;

cin.ignore();//这也吸收。(cin.ignore()还有其他参数,具体用法可参考百度或者msdn,这里只是竞赛中可常用的一种方法。请勿当作标准)

for(int i=0;i<length;i++){

cin.getline(inputText,length);

...

经过以上处理一般就可以达到我们竞赛中题目要求输入的效果啦。 

发布了18 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_20408397/article/details/83685568
今日推荐