2013-06-07 3 views
0

Возможно ли, чтобы в C пользователь «выбрал» значение из данных, ранее напечатанных на экране, переместив его курсор на нужное значение, а затем нажав . Введите или пробел ключ для подтверждения выбора?Можно ли разрешить пользователю выбирать значение из командной строки?

В качестве примера:

В следующем коде:

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 

Теперь, когда пользователь видит выход, можно позволить ему переместите курсор с помощью клавиш со стрелками в нужную позицию и пусть вход будет выбран пользователем?

+2

Возможно ли это? Да, но это большая работа. –

+5

Если вы хотите что-то более интерактивное, есть инструментальные средства, такие как ncurses, которые могут помочь – SheetJS

+0

Используя только C, как в том, что предлагает язык, я бы сказал нет. Но существует множество инфраструктур для создания пользовательских интерфейсов терминала. Может быть, посмотрите на ncurses? – HonkyTonk

ответ

2

Спасибо за все входные ребята. Я смог добиться того, чего хотел, после того, как ты указал мне на библиотеку curses.h, поэтому я поделюсь с вами результатом.

Некоторые примечания:

  • curses.h совместим только с UNIX, как ОС. Я читал, что можно переносить программу в Windows, но я не смотрел на нее.

  • при компиляции исходного кода необходимо, чтобы связать curses.h библиотеку

    -> г ++ 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); 
    } 
    
+0

Для Windows попробуйте [PDCurses] (http://pdcurses.sourceforge.net/) –

1

Нелегко, и это зависит от системы. Вам понадобится библиотека позиционирования курсора. Например, curses или ncurses.

+0

спасибо за ввод –

4

Используйте некоторую библиотеку программирования, которая позволяет программисту писать текстовые пользовательские интерфейсы независимым от терминала образом. Например, ncurses.

+0

Спасибо за вход. –

0

«Самый простой» способ, которым я знаю, чтобы ваша программа распознавала используемые клавиши со стрелками: ncurses. Here - учебник на итальянском языке.

+0

grazie mille ... –

Смежные вопросы