是否可以让用户从命令行中选择一个值?

时间:2013-06-07 18:50:43

标签: c

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

现在用户正在看输出,是否可以让他使用箭头键将光标移动到所需位置,并让输入成为用户选择的任何内容?

4 个答案:

答案 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)

不容易,并且它将取决于系统。您将需要一个游标定位库。例如,cursesncurses

答案 3 :(得分:0)

我知道让您的程序识别正在使用的箭头键的“最简单”方法是ncursesHere是意大利语的教程。