不一致的双减量?

时间:2013-12-12 20:17:42

标签: c++ debugging

我正在写一个小游戏,其中有一个隐藏的单词,用户必须猜测,char到char,是什么单词。 在对此进行编码时,我陷入了一些我不知道的事情,以及它发生的地点和方式。

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;
        }
    }

Hue是一个简单的控制变量,用于检查密钥是否在单词中。 如果它仍为0,则键不在单词中,因此Try会自行减少,依此类推。

但是,Hue,无论是0还是1导致Try的减少,更值得注意的是,当0为0时,尝试减少两次,在代码中均匀地写入不是那样的。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

似乎混淆主要是由于双重减少:嗯,你正在阅读char s并且很有可能你回击使两个char可用:输入的字符和{{1从回归。因为显然两个字符都不匹配,所以你得到两个减量。

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

跳过前导空格
scanf()

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

相关问题