1. 程式人生 > >【C/C++】記錄下gets,cin.getline清除換行方式

【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);

...

經過以上處理一般就可以達到我們競賽中題目要求輸入的效果啦。