重用char数组和cin.getline

时间:2018-08-09 11:21:13

标签: c++ char

我不能在圈子中第二次或更长时间使用s1 [40],并且它总是满的,

cin.getline(s1,40) 以后会被忽略

char s1[40], ans = 'y';
while (ans == 'y')
{       
system("cls");
cout << "\n Enter a sentence : ";
cin.getline(s1, 40);
fflush(stdin);

cout << "\n________________________________________\n\n Again?(y/n)";
cin >> ans;
fflush(stdin);
};

1 个答案:

答案 0 :(得分:0)

cin >> ans;实际上不会删除eol,因此下一个getline将读取一个空行,而cin >> ans;将读取该行的第一个符号。您还应该使ans成为数组,并两次使用getline

for(;;)
{
    char s1[40]{};
    system("cls");
    cout << "\n Enter a sentence : ";
    cin.getline(s1, 40);
    fflush(stdin);
    if(cin.fail() or cin.bad())
    {
        cout << "fail" << endl;
        break;
    }
    cout << "\n________________________________________\n\n Again?(y/n)";
    char ans[2]{};
    cin.getline(ans, 2);
    fflush(stdin);
    if(cin.fail() or cin.bad())
    {
        cout << "fail" << endl;
        break;
    }
    if(0 != strcmp("y", ans))
    {
        break;
    }
}