Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda