编辑1:
我想有一个程序可以检查按下的回车键,然后跳过一些代码(有点像某些游戏,当你启动时有可跳过的屏幕)。但我不希望它等待输入。
if(getchar()=='\n')
{
goto skip;
}
ClearScreen();
printf("%s Welcome to Guy's game!\n\n");
Sleep(500);
ClearScreen();
printf("%s Welcome to Guy's game!\n\n");
Sleep(500);
ClearScreen();
printf("%s Welcome to Guy's game!\n\n");
Sleep(500);
ClearScreen();
printf("%s Welcome to Guy's game!\n\n");
Sleep(500);
ClearScreen();
//this is the where it should skip
skip:
printf("%s Welcome to Guy's game!\n\n");
printf("Please enter your name: ");
gets(name);
Sleep(250);
我希望它在打印时检查输入"欢迎来到Guy的游戏!"所以无论何时我按下回车(只要它打印"欢迎来到盖伊的游戏!")我可以跳到代码的最后部分。 我无法弄清楚如何让它发挥作用。
更新
我还有一个问题,我忘了问... 我怎样才能修复"警告:隐含的功能声明'睡眠'当我使用时:
ClearScreen();
printf("%s Welcome to Guy's game!\n\n");
Sleep(500);
在for循环中。
答案 0 :(得分:2)
您需要将终端更改为不进行规范密钥处理。
所有终端都会保留一段时间的信息,以允许用户点击退格(以及程序没有获得删除的字符)。在按下特殊的“缓冲区刷新”键(如Enter或Return)之前,不会将此键击缓冲发送到程序。
在游戏中,这是不受欢迎的,只要你能得到它们就想要钥匙。这意味着您的程序将需要termios数据结构,然后关闭(与终端通信)Canonical键处理。请注意,这意味着您必须在程序中处理退格擦除(如果您希望在程序的其他部分中使用它,例如输入名称以获得高分)。
// define a terminal configuration data structure
struct termios term;
// copy the stdin terminal configuration into term
tcgetattr( fileno(stdin), &term );
// turn off Canonical processing in term
term.c_lflag &= ~ICANON;
// set the terminal configuration for stdin according to term, now
tcsetattr( fileno(stdin), TCSANOW, &term);
请注意,这只会改善响应;但是,当终端与内核通信时,你仍然会有很小的延迟,然后内核会与你的程序进行通信。
例如,内核实际捕获按键向下/按键事件,并在短暂的计时器周期内对其进行评估,以确定按键是否需要“自动重复”。
我的建议是,如果您有兴趣快速完成游戏,则不要自行编写此代码。而是使用一个游戏编程库来适当地交互和配置你的环境,比如allegro。
但是,如果你对它的工作方式感兴趣,请务必编写代码来处理它(因为这是一个非常有趣的话题,你真的会更好地理解终端/程序/内核通信!)
答案 1 :(得分:0)
启动一个显示您的消息的主题。同时,阅读键盘等待命中。当用户点击进入时,终止显示文本的线程并恢复正常流程跳转到新屏幕。
答案 2 :(得分:0)
所以..我终于解决了!我创建了一个新程序,试图找到如何修复我正在进行的工作。
(代码进入
的[...]Error 69.30.213.82 404 GET /dienstleister/eco-express/9260 HTTP/1.0 Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+) 23.8 K Apache access
下一个例子)
任何信件:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
void ClearScreen(void)
{
system("cmd /c cls");
}
int main(void)
{
[...] //Everything is in here for next examples
}
仅限一封信:
int i=0;
char name[20];
while(1)
{
for(i=1; i>0&&i<5; i++)
{
//ClearScreen();
printf("%i", i);
printf(" Welcome to Guy's game!\n\n");
Sleep(500);
while (kbhit())
{
getch();
goto INPUT;
i=0;
}
}
goto INPUT;
}
INPUT:
ClearScreen();
//this is the where it should skip
printf(" Welcome to Guy's game!\n\n");
printf("Please enter your name: ");
gets(name);
Sleep(250);
printf("%s", name);
return 0;
如果您愿意,可以在代码中使用它!祝你好运,谢谢你的所有答案!
* BTW我让它在循环中显示数字,以便证明程序有效,但是你可以把它拿走,因为它不需要。