Estoy ejecutando un programa C++ desde la línea de comandos en Bash, que se encuentra en un entorno Linux. Tengo curiosidad por cómo pasas un parámetro desde la línea de comando. Aquí está mi programa:
#include <iostream> using namespace std; int large_pow2( int n ); int main() { int value = 15; int largest_power = large_pow2(value); cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl; return 0; } int large_pow2( int n ) { int i = n int j = i & (i - 1); while( j != 0) { i = j; j = i & (i - 1); } return j; } Después de compilar el programa, quiero poder usar la línea de comando para pasar un número para usar como value . Por ejemplo, para ejecutar el programa, escriba ./"program_name" donde "program_name" es el nombre de mi programa sin comillas. ¿Hay alguna manera de establecer el value = n o algo así? Cuando ejecuto el programa, digamos que quiero que n sea 20 , así que en la línea de comando escribo algo como ./"program_name" 20 . Entonces el programa se ejecutaría con n = 20 . ¿Hay una manera de hacer eso? Soy completamente nuevo en un entorno Linux y Bash, por lo que aún no sé cómo hacer las cosas en él.
Use argc y argv en int main(int argc, char *argv[]) y modifique su código en consecuencia.
Los argumentos argc el número de argumentos pasados a su programa desde la CLI y siempre es >=1. Cuando 1 es el nombre del programa. Entonces argc[0] es el nombre del programa.
argv contiene los argumentos de la línea de comando, además del nombre del programa, y siempre es una cadena de caracteres. Por lo tanto, debemos usar un convertidor apropiado como atoi , si no desea una cadena.
Por lo tanto, su código se verá como si la verificación de errores no se realizara por simplicidad
int main(int argc, char *argv[]) { //Now we expect argc ==2, program value, This will when argc != 2 // We should use if in real scenario assert(argc == 2); int value = atoi(argv[1]) int largest_power = large_pow2(value); cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl; return 0; }Su método principal puede tomar (int argc, char** argv) que son el recuento de argumentos y los argumentos terminados en NUL. La ruta del programa es argv[0], por lo que probablemente lo que desee sea atoi(argv[1]). Compruebe argc ==2.