Output Befor 给出用于寻找回文的字符串输入

Output Befor giving the input of string for finding palindrome

这段代码在输入测试用例的值后立即给出输出 YES。 代码:字母数字回文

int main() {
    int t;
    cin>>t;
    while(t--){
        string s;
        int count = 0,size = 0;
        getline(cin,s);
        cout<<s<<endl;
        s.erase(remove_if(s.begin(),s.end(),not1(ptr_fun((int(*)(int))isalnum))), s.end());
        for(int i=0;i<=s.size()/2;i++){
            size++;
            if(tolower(s[i])==tolower(s[s.size()-i-1])){
                count++;
            }
            else
                break;
        }
        if (count==size)
            cout<<"YES"<<endl;
        else
            cout<<"NO"<<endl;
    }
    return 0;
}

我得到的输出是 YES,没有给出任何字符串输入

For Input:
2
I am :IronnorI Ma, i
Ab?/Ba
Your Output is:

YES
I am :IronnorI Ma, i
YES

This code is giving output YES just after entering the value of test case. Output I am getting is YES without giving any input of string

您的问题在这里:

/* code */
    cin>>t;    -----------> std::cin        
    while(t--)
    {
        string s;
        int count = 0,size = 0;
        getline(cin,s); ------------> std::getline()

/* remaining code */

使用 std::cin 之类的内容进行阅读会在输入流中留下换行符。当控制流到达std::getline()时,换行符将被丢弃,但输入会立即停止。这导致,std::getline()s 尝试读取新行并跳过输入。

FIX:当从白色 space 分隔输入切换到换行分隔输入时,您想通过执行 std::cin.ignore() 清除输入流中的所有换行符

固定码应该是:https://www.ideone.com/ucDa7i#stdin

#include <iostream>
#include <string>
#include <limits>
#include <algorithm>

int main()
{
    int t;
    std::cin >> t;
    // fix
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

    while(t--)
    {
        std::string s;
        int count = 0,size = 0;
        getline(std::cin,s);
        /* remaining code */
}