C++输入出错

C++ input goes wrong

我正在解决 uva 问题并尝试输入一系列字符串。问题是当我尝试在 While 循环中输入字符串时,第一次输入正常。但在那之后,每个字符串的第一个字符都会被忽略。所以我使用了 __fpurge() 函数并且效果很好。但我无法在 uva Online Judge 网站上使用该功能。如何替换 __fpurge 函数?

char crypt_text[MAXLEN]


 int main()
    {
        char alphabet['z'+1], cryptchar['z'+1]; 
        std::cin>>n;

    for(int i=0; i<n; i++)
        std::cin>> dictionary[i];
    while(1)
    {
        __fpurge(stdin);
        std::cin.getline(crypt_text,MAXLEN,'\n');
        if(cin.eof()) break;
        for(int i=0; i<'z'+1; i++)
        {
            alphabet[i] = '[=10=]';
            cryptchar[i] = '[=10=]';
        }

        if(!crypt_kicker(0,alphabet,cryptchar)) print_asterisk();
    }
    return 0;
}

我觉得你的问题出在__fpurge

For input streams this discards any input read from the underlying object but not yet obtained via getc(3);

也许这可以解决您的问题。这是一种更像 C++ 的处理输入的方式。

int main()
{
    int n;
    std::cin >> n;
    // declare dict, whatever it is
    for(int i = 0; i < n; i++)
        std::cin >> dictionary[i];

    const std::size_t len = 'z'+1;
    std::array<char, len> alphabet;
    std::array<char, len> cryptchar; 

    std::string crypt_text;
    while(std::getline(std::cin, crypt_text))
    {
        std::fill(std::begin(alphabet), std::end(alphabet), 0);
        std::fill(std::begin(cryptchar), std::end(cryptchar), 0);

        if(!crypt_kicker(0,alphabet,cryptchar))
            print_asterisk();
    }
}

我不确定你是否真的想要 len = 'z'+1 而不是 len = 'z'-'a'+1std::array 不需要结尾 '[=14=]'