【问题标题】:How to terminate an executing program once keyboard is pressed按下键盘后如何终止正在执行的程序
【发布时间】:2020-06-29 06:18:36
【问题描述】:

这是我的代码,我在这个阶段的目标是创建一个 ASCII 动画,一旦输入任何字符就终止它。我在这个阶段使用getch(),但它似乎不起作用。

#include <stdio.h>
#include <time.h>
#include <curses.h>

int main() {
    int i, j, ms = 250;    
    const char *a = "*";
    struct timespec delay;
    delay.tv_sec = 0;
    delay.tv_nsec = ms * 1000000L;
    while(1) {
        for (i = 0; i < 4; i++) {
            printf("%c", a[i]);
            fflush(stdout);
            nanosleep(&delay, NULL);
            printf("\b");
        }
        if(getch() != -1)break;
        //printf("%c,%d\n",buffer,buffer);
    }
    return 0;
}

【问题讨论】:

  • 不起作用是什么意思?会发生什么?
  • 你需要开启getch()的无延迟模式,否则会阻塞等待用户输入。对于 i = 0..3,您还可以使用 a[i],但 a 里面只有 2 个字符,而不是 4 个:'*' 和 '\0'。
  • 问题是我输入了什么,程序只是继续执行而不是停止。
  • 不要使用-1,使用EOF来检测文件结束。您需要结束输入,EOF 才能由getch 返回。在 Unix 系统上,您可以键入 ^D 来实现此目的。对于 Windows,嗯,大概有一些方法可以做到这一点。
  • 如何调用编译器?

标签: c printf output ascii curses


【解决方案1】:

在使用any curses函数之前,需要调用initsrc函数,手册说:

#include &lt;curses.h&gt;

WINDOW *initscr(void);

说明

initscr 通常是初始化时调用的第一个 curses 例程 一个程序。

initscr 代码确定终端类型并初始化所有 诅咒数据结构。 initscr 还会导致第一次调用刷新 清除屏幕。如果发生错误,initscr 会写一个适当的 标准错误的错误信息并退出;否则,指针是 返回stdscr。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多