在下面的代码中:我不必按Enter即可使用getch()获得字符,这仅适用于Windows(mingw)。我正在编写一个简单的秒表,如果不需要按下ENTER键就可以按下键盘键来做出反应,但是在linux(GCC)上同样的事情不起作用。而且我必须只使用getch()而没有找到解决方案回声。我一直在四处搜寻,没有运气。先感谢您。 PS:我是c / c ++初学者。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
printf("\n\t\tStopwatch \n\n \t Press S to start \n\n");
time_t start;
char c ;
struct tm tm ;
do {
c=getch(); /*get the Character without pressing ENTER*/
if (c!= 'S' && c!= 's') printf("\nWrong key. Please press'S' to Start\n");
} while(c!= 'S' && c!= 's');
start=time(NULL);
tm = *localtime(&start);
printf("\n Starting time :: %d:%d:%d \n", tm.tm_hour, tm.tm_min, tm.tm_sec);
return 0;
}
答案 0 :(得分:2)
Unix(以及Linux)具有终端(TTY)的概念,该概念可能非常复杂。 每个过程都可以与一个终端关联(实际上很多都关联)。 该终端具有不同的选项,例如您提到的ECHO和LINE BUFFER(这是您报告的输入问题)。 要设置终端,低级API是termios(请参阅“ man termios”)。 另一个更友好的API是ncurses(请参阅“ man ncurses”)。例如,在https://www.mkssoftware.com/docs/man3/curs_inopts.3.asp,您可以看到一些用于不同设置的功能。
一个简单的ncurses示例(您可以使用“ gcc -O2 source.c -o output -Incurses”进行编译):
#include <stdio.h>
#include <ncurses.h>
int main(void)
{
initscr();
cbreak();
noecho();
int n = getch();
printf("%d %c\n", n, n);
}