2017-07-26 28 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

一個解決方案是在調用getline()之前添加'while(cin.peek()=='\ n')cin.get();'行。這會從輸入流中清除換行符。 – jodag

回答

2

您鍵入1<enter>cin >> t只消耗1<enter>然後被getline(cin,s)消耗。

+0

你的意思不是很清楚,所以我該怎麼做? – daddyodevil

相關問題