C中是否可以让用户通过将光标移动到所需的值然后按 Enter 或 space <从屏幕上先前打印的数据“选择”一个值/ kbd>确认选择的关键?
举例说明:
在以下代码中:
int x[10] = {1,2,3,4,5,6,7,8,9,10};
int i;
for(i = 0; i < 10; ++i){
printf("%i ", x[i]);
}
输出结果为:
1 2 3 4 5 6 7 8 9 10
现在用户正在看输出,是否可以让他使用箭头键将光标移动到所需位置,并让输入成为用户选择的任何内容?
答案 0 :(得分:4)
使用某种编程库,允许程序员以与终端无关的方式编写基于文本的用户界面。例如,ncurses。
答案 1 :(得分:2)
感谢所有输入人员。在你把我指向图书馆curses.h后,我能够实现我想要的,所以我会在这里与你分享结果。
有些说明:
curses.h仅与操作系统等UNIX兼容。我读过可以将程序移植到Windows,但我没有考虑过。
编译源代码时,需要链接curses.h库
- &GT; g ++ fileName.c -lcurses
有些变量和函数名称不是英文,但我确保对它们进行全部评论。
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
WINDOW *janela; // Points to a Windows Object
int xPos; // current x cursor position
int yPos; // current y cursor position
int main(void){
// Declaration of all functions
void moverEsquerda(void); //move left
void moverDireita(void); //move right
void moverCima(void); //move up
void moverBaixo(void); //move down
int lerInt(void); //read value
char c; // This variable stores the user input(up, down, left, etc...)
janela = initscr(); // curses call to initialize window
noecho(); // curses call to set no echoing
cbreak(); // curses call to set no waiting for Enter key
int tabela[4][4]; // This array is just for demonstration purposes
tabela = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
// places the cursor at 0,0
xPos = 0;
yPos = 0;
move(yPos, xPos);
int num; // Stores the select by the user
// The following while is executed until the user presses an
// "invalid key"
while (1) {
c = getch();
if (c == 'w') moverCima();
else if(c == 's') moverBaixo();
else if(c == 'a') moverEsquerda();
else if(c == 'd') moverDireita();
else if(c == '\n'){ // If user presses Enter the caracter is writen in a txt file
FILE *file = fopen("test.txt", "a");
num = (int)inch();
fprintf(file, "Voce selecinou o numero %c\n", num);
fclose(file);
}
else {
endwin(); //ends window object
break; //exit the loop
}
}
return 0;
}
void moverCima(void){
--yPos;
move(yPos, xPos);
}
void moverBaixo(void){
++yPos;
move(yPos, xPos);
}
void moverDireita(void){
++xPos;
move(yPos, xPos);
}
void moverEsquerda(void){
--xPos;
move(yPos, xPos);
}
答案 2 :(得分:1)
不容易,并且它将取决于系统。您将需要一个游标定位库。例如,curses
或ncurses
。
答案 3 :(得分:0)
我知道让您的程序识别正在使用的箭头键的“最简单”方法是ncurses
。 Here是意大利语的教程。