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