处理非指定及;非空Getch()(C程序)

处理非指定及;非空Getch()(C程序),c,while-loop,ncurses,getch,C,While Loop,Ncurses,Getch,我试图处理用户输入的代码中没有特别注意到的内容。我使用的是getch(),当用户输入“1”时,有一个条件会对其作出反应;然而,我想实现的是,如果用户输入任何其他内容,另一个条件将对此做出反应。我认为这意味着检查getch()是否EOF和if getch()!='1'但是我没有得到我认为我会得到的结果。。。有时是条件命中,有时不是。我的代码如下(请记住使用-lncurses编译): #包括 int main() { initscr(); //使用户输入立即可用 cbreak(); //使getch

我试图处理用户输入的代码中没有特别注意到的内容。我使用的是getch(),当用户输入“1”时,有一个条件会对其作出反应;然而,我想实现的是,如果用户输入任何其他内容,另一个条件将对此做出反应。我认为这意味着检查getch()是否EOF和if getch()!='1'但是我没有得到我认为我会得到的结果。。。有时是条件命中,有时不是。我的代码如下(请记住使用-lncurses编译):

#包括
int main()
{
initscr();
//使用户输入立即可用
cbreak();
//使getch()不回显用户取消输出
noecho();
//如果用户输入过多,请使用滚动显示
scrollok(stdscr,TRUE);
//将getch()转换为非阻塞调用
节点延迟(stdscr,真);
//永远循环
while(true){
//如果用户输入“1”,则表示成功
如果(getch()=“1”){
printw(“砰!\n”);
}
//其他任何东西都是错过的
如果((getch()!='1')&&(getch()!=EOF)){
printw(“摇摆和失误!\n”);
}
//睡眠300毫秒
国家行动方案(300);
printw(“.\n”);
}
返回0;
}
感谢您的帮助。

您的逻辑是错误的

你可能想要这个:

while (true) {
    int c = getch();

    if (c == ERR) {                      // no key pressed
        printw(".\n");
    }
    else if (c == '1') {                 // if the user enters '1' its a hit
        printw("WHACK!\n");
    }
    else {                               // anything else is a miss       
        printw("SWING AND A MISS!\n");
    }

    // sleep for 300 milliseconds
    napms(300);
}

免责声明:这是未经测试的代码。

您可能需要使用
else
关键字,但您想要的内容并不十分清楚。
如果(getch()='1'){printw(“WHACK!\n”);}else{printw(“SWING和未命中”);}
也许吧?@很遗憾,由于循环,这只会连续打印SWING和未命中,我需要说得更具体一点。@MichaelWalz我只希望输入(“.\n”)时不打印任何内容,“砰!”在输入“1”时打印,“Swing and a miss!”在输入任何其他内容时打印。您可能应该将
getch()
的结果分配给一个变量并测试,而不是多次调用
getch()。。。你只想在每个循环过程中读取一个字符,对吗?是的,这就是我想要的。有没有必要冲洗stdin或以任何方式清除getch?@laroy我不知道,可能没有。这可能是另一个问题。@laroy-我相信
fflush(stdin)
调用了未定义的行为
while (true) {
    int c = getch();

    if (c == ERR) {                      // no key pressed
        printw(".\n");
    }
    else if (c == '1') {                 // if the user enters '1' its a hit
        printw("WHACK!\n");
    }
    else {                               // anything else is a miss       
        printw("SWING AND A MISS!\n");
    }

    // sleep for 300 milliseconds
    napms(300);
}