我在写一个小游戏,里面有一个隐藏的单词,用户必须猜到一个字符,一个字符。
在编写此代码时,我陷入了一些我不明白的地方以及发生方式的问题。

while(true)
{
    if(Hue == 0)
        Try -= 1;

    if(Hue == 1)
        Hue = 0;

    GotoXY(0, 3);
    printf("Inserisci una lettera maiuscola\n>");
    GotoXY(1, 4);
    scanf("%c", &Key);
    GotoXY(0, 4);
    printf("        ");

    GotoXY(0, 6);
    printf("Numero di tentativi rimasti: %d ", Try);

    for(unsigned short Iterator = 1; Iterator < Length - 1; ++Iterator)
        if(Key == UserString[Iterator])
        {
            for(unsigned short SecIterator = Iterator; SecIterator < Length - 1; ++SecIterator)
            {
                if(Key == UserString[SecIterator])
                {
                    GotoXY(SecIterator, 1);
                    printf("%c", Key);
                }
            }

            Hue = 1;
            break;
        }
    }


色相是一个简单的控制变量,用于检查键是否在单词中。
如果它仍然是0,则说明密钥不在单词中,因此Try会对其自身进行递减操作,依此类推。

但是发生的情况是,色相,无论是0还是1都会导致Try的减量,而更令人毛骨悚然的是,当0时,Try减量两次,而在代码中均匀地没有写这样的东西。
谢谢您的帮助。

最佳答案

似乎造成混淆的原因主要是双倍减量:嗯,您正在阅读char,很可能是您按下回车键使两个char可用:输入的字符和返回的'\n'。由于显然两个字符都不匹配,因此您会减少两个。

仅作一点说明:使用格式化的输入时,使用std::cin >> Key的前导空白将被跳过。使用scanf("%c", &c)时,将提取每个字符。我认为您可以使用scanf()跳过前导空格

if (1 == scanf(" %c", &c)) {
    // process the input
}


请注意'%c'前面的多余空间。要调试此类问题,通常最好打印阅读的内容。 ...,当然,您始终需要验证读取是否成功。

10-08 12:04