不存在的双重递减

Inexistent double decrement?

本文关键字:不存在      更新时间:2023-10-16

我正在写一个小游戏,其中有一个隐藏的单词,用户必须猜测,从一个字符到另一个字符,单词是什么。在编写这个代码时,我陷入了一些我不了解的事情中,也不了解它在哪里以及如何发生。

while(true)
{
    if(Hue == 0)
        Try -= 1;
    if(Hue == 1)
        Hue = 0;
    GotoXY(0, 3);
    printf("Inserisci una lettera maiuscolan>");
    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;
        }
    }

Hue是一个简单的控制变量,用于检查关键字是否在单词中。如果它仍然是0,那么密钥不在单词中,所以Try会自行递减,依此类推

但实际情况是,Hue,无论是0还是1,都会导致Try的递减,更奇怪的是,Try在为0时递减两次,均匀地写在代码中并不是这样的。谢谢你的帮助。

混乱似乎主要是由于双倍递减:好吧,你正在读取char s,很可能你点击了return,使两个char s可用:输入的字符和返回中的'n'。显然两个角色都不匹配,所以你会得到两个法令。

只是为了解释一下:当使用格式化的输入时,会跳过使用std::cin >> Key的前导空格。当使用scanf("%c", &c)时,提取每个字符。我认为可以让scanf()使用跳过前导空格

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

请注意"%c"前面的多余空间。要调试这样的问题,通常最好打印读取的内容。。。当然,你总是需要验证阅读是否真的成功。