竞赛中经常出现:
输入格式
第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);
...
}
经过以上处理一般就可以达到我们竞赛中题目要求输入的效果啦。