C/Visual C - problemas getopt

 
Vista:

problemas getopt

Publicado por quantium (22 intervenciones) el 26/11/2002 00:31:56
Hola a todos.
¿conoceis alguna manera para hacer que un argumento se ejecute primero usando getopt?

Por ejemplo:
./programa -c azul -n pepe -e 18 -s hombre

Y yo quiero que el programa primero ponga:
Nombre pepe
(y despues ya me da igual)

Un saludo a todos y gracias :)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Priorizar la ejecución de un argumento con getopt en C

Publicado por Alejandro (913 intervenciones) el 10/04/2025 19:43:30
Para asegurarte de que un argumento específico se ejecute primero al usar `getopt`, puedes implementar una lógica que verifique y procese ese argumento antes de los demás. A continuación, te muestro un ejemplo de cómo hacerlo:

Ejemplo de código



Aquí tienes un ejemplo de cómo podrías implementar esto en tu programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
 
int main(int argc, char *argv[]) {
    int opt;
    char *nombre = NULL;
    char *color = NULL;
    int edad = 0;
    char *sexo = NULL;
 
    // Procesar los argumentos
    while ((opt = getopt(argc, argv, "c:n:e:s:")) != -1) {
        switch (opt) {
            case 'c':
                color = optarg;
                break;
            case 'n':
                nombre = optarg;
                break;
            case 'e':
                edad = atoi(optarg);
                break;
            case 's':
                sexo = optarg;
                break;
            default:
                fprintf(stderr, "Uso: %s -c color -n nombre -e edad -s sexo\n", argv[0]);
                exit(EXIT_FAILURE);
        }
    }
 
    // Imprimir el nombre primero
    if (nombre != NULL) {
        printf("Nombre: %s\n", nombre);
    }
 
    // Imprimir otros argumentos
    if (color != NULL) {
        printf("Color: %s\n", color);
    }
    if (edad > 0) {
        printf("Edad: %d\n",edad);
    }
    if (sexo != NULL) {
        printf("Sexo: %s\n", sexo);
    }
 
    return 0;
}

Explicación del código


1. Uso de `getopt`: El programa utiliza `getopt` para procesar los argumentos de línea de comandos. Los argumentos esperados son `-c` para color, `-n` para nombre, `-e` para edad y `-s` para sexo.
2. Almacenamiento de argumentos: Los valores de los argumentos se almacenan en variables correspondientes.
3. Impresión prioritaria: Antes de imprimir los otros argumentos, se imprime el nombre si está presente. Esto asegura que el nombre se muestre primero, independientemente del orden en que se pasen los argumentos.

Consideraciones


- Validación: Puedes agregar validaciones adicionales para asegurarte de que los argumentos sean válidos.
- Flexibilidad: Este enfoque te permite manejar la lógica de impresión de manera flexible, asegurando que el nombre se imprima primero sin importar el orden de los argumentos.

Con este método, podrás priorizar la ejecución de un argumento específico al usar `getopt` en tu programa. ¡Espero que esto te sea útil, Quantium!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar