我在写一个小游戏,里面有一个隐藏的单词,用户必须猜到一个字符,一个字符。
在编写此代码时,我陷入了一些我不明白的地方以及发生方式的问题。
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'前面的多余空间。要调试此类问题,通常最好打印阅读的内容。 ...,当然,您始终需要验证读取是否成功。