2017-07-26 9 views
0

ここではtはテストケースの数を入力とする変数です。 1を入力すると、新しい行が印刷され、終了します。 1より大きい数字を与えるとき、新しい行を印刷してから新しい入力を求めています。誰かが私に理由を教えてくれる?なぜ入力を取る代わりに、私のプログラムはテストケースの数が1のときに新しい行を出力していますか?

#include "iostream" 
#include "string" 

using namespace std; 

int main() 
{ 
    int t,i,k,l,j=0; 
    char c; 
    string s, s2; 
    cin >> t; 
    while(t>0) 
    { 
     cout << "Enter Name - " << endl; 
     getline (cin,s); 
     l = s.size(); 
     s2 = toupper(s[0]); 
     for(i=1; i<l; i++) 
     { 
      if(s[i] == ' ') 
      { 
       c = toupper(s[i+1]); 
       s2 = s2 + ". " + c; 
       j = i; 
      } 
      if(i == l-1) 
      { 
       if(j!=0) 
       { 
        for(k=j+2; k<l; k++) 
        { 
         c = tolower(s[k]); 
         s2 = s2 + c; 
        } 
       } 
       else 
       { 
        for(k=1; k<l; k++) 
        { 
         c = tolower(s[k]); 
         s2 = s2 + c; 
        } 
       } 
      } 
     } 
     cout << s2 << endl; 
     s2 = ""; j=0; t--; 
    } 
    return 0; 
} 

出力 -

[email protected] /media/puku/Data/Work/Programs/C++ Mine/CodeChef/Easy $ ./a.out 
1 
Enter Name - 

[email protected] /media/puku/Data/Work/Programs/C++ Mine/CodeChef/Easy $ ./a.out 
3 
Enter Name - 

Enter Name - 
my name 
M. Name 
Enter Name - 
this is name 
T. I. Name 
+0

解決策の1つは、 'getline()'の呼び出しの前に 'while(cin.peek()== '\ n')cin.get();'行を追加することです。これにより、改行文字が入力ストリームから消去されます。 – jodag

答えて

2

あなたは1<enter>を入力します。 cin >> tはちょうど1を消費します。次いで、<enter>は、getline(cin,s)によって消費される。

+0

何を意味するのかはあまり明確ではないので、どうすればいいですか? – daddyodevil

関連する問題