2009-02-07 11 views
9

¿Cómo se puede hacer que el programa lea cualquier entrada de dos enteros antes de ejecutar el programa? Quiero la salida a este aspecto, con X e Y siendo las variables de tipo de (estoy usando Cygwin):¿Cómo se lee en números como argumentos de comando?

$ ./axy

producto de xey

suma de x y y

utilicé int main(int argc, char *argv[]). Traté de asignar argv[2] a x y argv[3] a y, pero cuando compilo el programa dice que la asignación crea un entero desde el puntero sin conversión. ¿Qué significa esto y cómo lo soluciono?

+0

Qué idioma se utiliza? – sykora

+0

¿Su libro de texto no proporciona ejemplos sobre el uso de argumentos de comando? – mmcdole

+0

Estoy usando el lenguaje c. Hemos cubierto solamente los primeros tres capítulos del libro, y el capítulo para esto está a la mitad y es un completo galimatías para mí. ¡El maestro cubrió esto cuando yo estaba ausente, así que no tengo ni idea! – Kaity

Respuesta

30

Suponiendo que el lenguaje C:

  • argumentos de línea de comandos se encuentran en la matriz argv - argv [1], argv [2] etc.
  • la conversión de un argumento de cadena a un entero se puede hacer con la función atoi.
  • La salida se puede hacer con la función printf.

[Tratando de enseñarle a pescar, en lugar de proporcionar un pez. ¡Buena suerte!]

17

Suponiendo que está utilizando bash, puede usar $ 1, $ 2, etc. para esos argumentos. Sin embargo, si está usando C, su código debería ser algo como esto:

#include <stdio.h> 
#include <stdlib.h> 

main(int argc, char *argv[]) { 
    if(argc<=1) { 
     printf("You did not feed me arguments, I will die now :(..."); 
     exit(1); 
    } //otherwise continue on our merry way.... 
    int arg1 = atoi(argv[1]); //argv[0] is the program name 
           //atoi = ascii to int 
    //Lets get a-crackin! 
} 

Espero que esto ayude.

+0

Esto funciona bien. –

4

primer lugar, si se ejecuta el programa de C como

./axy

entonces a es argv [0], x es argv [1], e y es argv [2] , ya que las matrices C están basadas en 0 (es decir, el primer elemento de la matriz está indexado con 0.

Darse cuenta de que argv es una matriz (o siempre lo he pensado como un Vector ARGument, aunque se lo piense) como una matriz de ARGument Values) de punteros de cadena de caracteres. Por lo tanto, debe convertir las cadenas en enteros. s. Afortunadamente, C tiene funciones de biblioteca para convertir ASCII a entero. Mire la documentación de stdlib.h

¡Buena suerte!

0

En argumentos de línea de comandos, char * argv [] es un tipo de cadena. Necesitamos convertirlo en enteros. Hacemos esto mediante la conversión de tipos, pero en oop hacemos esto por la función atoi (método), que funciona como encasillamiento (significa método para convertir un tipo de datos a otro)

+1

char * argv [] es el puntero del puntero char; aquí, es un arreglo char * en lugar de un tipo de cadena. – mattsap

0
int arg1 = argv[1]; 

no funcionará, ya que es una matriz de punteros que sostiene todas las direcciones de argv[0]....argv[n] para obtener el valor de argv[..] suponer argv[1] hay que escribir:

int n=*argv[1]-'0'; // Direct atoi 
0

Mi código se vería así.

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 
    // argc is number of arguments given including a.out in command line 
    // argv is a list of string containing command line arguments 
    int total = 0; 
    int i; 
    char *value; 
    for(i = 1; i < argc; i++) 
    { 
     // The integers given is read as (char *) 
     value = argv[i]; 
     printf("Command line index: %d value: %s in ascii: %d\n", i, value, *value); 

     // Convert ascii to integer. 
     // atoi function is defined in stdlib.h 
     total += atoi(value); 
    } 
    // .2f limits the decimals to two digits after '.' 
    printf("Total of given integers is %d\n", total); 
} 

enter image description here

Cuestiones relacionadas