Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

152
Visualizações
autocompletar texto usando Tab en la línea de comando

Me pregunto cómo implementar un programa en C que pueda completar automáticamente el comando o el texto que está ingresando en la línea de comando. Por ejemplo, digamos que su programa solicita al usuario un nombre de archivo. En su mayoría, uno usaría scanf() o de lo contrario para hacer esto. Y luego, en la línea de comando, se le pedirá al usuario que please input the file name:_ .

Digamos que hay un shakespeare.txt en el mismo directorio. Y ahora he ingresado shakes , y luego quiero que la computadora complete automáticamente el shakespeare.txt por mí, como lo hace con la mayoría de los programas cuando el usuario presiona Tab . ¿Cómo implementar eso?

Editar : para que quede más claro, otro ejemplo:

si usa grep en su línea de comando, como grep -i "shakespeare" shakespeare.txt , antes de completar shakespeare.txt usted mismo, si simplemente usa Tab , aparecerán algunos candidatos.

¿Cómo puedo implementar mi programa para que posea estas utilidades cuando intento solicitar al usuario una entrada cuando uso una función como scanf() ?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Si considera usar una utilidad existente, eche un vistazo a la biblioteca de línea de lectura GNU que proporciona una implementación bastante ordenada de lo que está buscando.
Hay algunas otras características útiles, como mover el cursor en su entrada, proporcionar un historial de entrada y un indicador similar a un shell de entrada.

La funcionalidad de esta biblioteca funciona de manera idéntica en diferentes plataformas.

Como muestra este ejemplo de Wikipedia, la clave para indicar la finalización se puede configurar fácilmente:

 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <readline/readline.h> #include <readline/history.h> int main() { char* input, shell_prompt[100]; // Configure readline to auto-complete paths when the tab key is hit. rl_bind_key('\t', rl_complete); for(;;) { // Create prompt string from user name and current working directory. snprintf(shell_prompt, sizeof(shell_prompt), "%s:%s $ ", getenv("USER"), getcwd(NULL, 1024)); // Display prompt and read input (NB: input must be freed after use)... input = readline(shell_prompt); // Check for EOF. if (!input) break; // Add input to history. add_history(input); // Do stuff... // Free input. free(input); } return 0; }
over 4 years ago · Santiago Trujillo Relatório

0

Debido a que en C no existe una solución portátil para saber lo que ha escrito en un aviso sin presionar Intro, necesita leer carácter por carácter.

  • En Windows puede usar la función _getch() para leer un carácter sin necesidad de presionar enter. La función está definida en conio.h
  • En Linux puedes usar la función getch().

Nota: es posible que desee utilizar getche() para repetir el carácter.

Deberá definir un búfer donde almacenará carácter por carácter todo lo que presione el usuario, hasta que el usuario presione enter o presione enter. Cuando encuentre \t, analizará el contenido del búfer y tomará una decisión basada en eso.

El siguiente código es un ejemplo simplificado:

 char c; int i = 0; do { c = _getche(); if (c == '\t') { // Autocomplete // Print the rest of the word here } else { buff[i++] = c; } } while (c != '\n' && c!='\r'); buff[i] = '\0'; // Let's keep the standard
over 4 years ago · Santiago Trujillo Relatório

0

No está claro si su solicitud de finalización realizada por

  1. El propio programa mientras se está ejecutando. Presumiblemente, estaría implementando alguna línea de comando personalizada.
  2. La línea de comando del sistema operativo (p. ej., bash) antes de iniciar el programa y solo desea completar automáticamente los argumentos que se le pasan

Su ejemplo de grep sugiere que pregunte sobre la finalización del shell. Aquí hay un ejemplo.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda