Dev - C++ - cout<< No sale

 
Vista:
sin imagen de perfil

cout<< No sale

Publicado por jose_luis (9 intervenciones) el 03/06/2017 23:06:35
Hola:
Tengo el programa que reflejo más abajo en el que se intenta sacar los parámetros que se introducen en la línea de comandos al ejecutarlo. Sin embargo, después de sacarlos a través del bucle for, los siguientes cout ya no salen.
En consola no sale el texto:
1
2
cout<<"\nAnotacion, Si tenemos argc=1 entonces tenemos argv[0]=nombre programa y argv[1] es null\n para ultimo =null y no saca mas cout (?)\n";
cout<<"\nBye\n";

Aquí dejo el programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
 
using namespace std;
 
int main(int argc, char* argv[]) {
 
    cout<<"Numero de parametros: "<<argc<<"\n";
 
    for (int i=0; i<=(argc); i++){
        cout<<"valor de: "<<i<<" : "<<argv[i]<<endl;}
    cout<<"\nAnotacion, Si tenemos argc=1 entonces tenemos argv[0]=nombre programa y argv[1] es null\n para ultimo =null y no saca mas cout (?)\n";
    cout<<"\nBye\n";
 
    return 0;
}
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
sin imagen de perfil
Val: 22
Ha disminuido su posición en 2 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

cout<< No sale

Publicado por Héctor (17 intervenciones) el 03/06/2017 23:51:56
Desde dónde estás ejecutando el programa?
Es necesario ejecutarlo directamente desde el sistema, para ello puedes crear un archivo .bat con el contenido siguiente:

<nombre programa> <arg1> ... [arg2] [arg3]

Por ejemplo si el programa creado se llama 'lineacmd.cpp', se generará entonces un 'lineacmd.exe', y en el .bat se coloca, por ejemplo, lo siguiente:

lineacmd param1 3423 param3 11234

luego guardamos, y por último ejecutamos el .bat (pulsando doble clic)
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
sin imagen de perfil

cout<< No sale

Publicado por jose_luis (9 intervenciones) el 04/06/2017 08:19:59
Muchas gracias, Héctor.

El programa lo ejecuto desde el mismo IDE (Netbeans) y también lo ejecuto desde la línea de comandos con los mismos resultados.

Si se copia y pega en vuestro IDE tendremos los mismos resultados.

Cuando lo ejecuto para obtener todos los argc (incluido el último que es null) no me saca por pantalla los siguientes cout.

Sin embargo cuando lo ejecuto con (argc-1) y esto puesto en la línea del bucle [ for (int i=0; i<=(argc-1); i++) ] entonces si me saca los siguientes cout. "Probad y veréis" estos dos códigos:

/**************Primero que no sale******************/

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
cout<<"Numero de parametros: "<<argc<<"\n";
for (int i=0; i<=argc; i++){
cout<<"valor de: "<<i<<" : "<<argv[i]<<endl;}
cout<<"\nEste cout y siguientes no sale ahora\n, véase que hemos puesto en bucle argc";
cout<<"\nBye\n";
 
return 0;
}

/**********Segundo que si sale******************************/

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
cout<<"Numero de parametros: "<<(argc-1)<<"\n";
for (int i=0; i<=(argc-1); i++){
cout<<"valor de: "<<i<<" : "<<argv[i]<<endl;}
cout<<"\nEste cout y siguientes si sale ahora\n, véase que hemos puesto en bucle argc-1";
cout<<"\nBye\n";
 
return 0;
}

Lo que he podido encontrar es que cuando introducimos en la línea de comando para su ejecución, por ejemplo, la orden:

>nombredelprograma.exe primero segundo tercero [Intro]

Tenemos argc==4 (son cuatro argumentos) con:
1
2
3
4
5
argv[0]==nombredelprograma.exe
argv[1]==primero
argv[2]==segundo
argv[3]==tercero
argv[4]==               //No aparece nada (es null)

Que argv[4]== significa que cuando se introducen los datos en la línea de comandos, para este argumento se termina en null(0) y parece ser que en la cuarta iteración y hacerse cout<<............<<argv[4]<<............ se le pasa ese null (ó cero) a cout y este parece como si a partir de ahí se anulara y ya no pudiera extraer mas cout.

Se puede ver el libro "El lenguaje de programación c++" Edición especial BJARNE STROUSTRUP en su página 122, punto 6.1.7 Parámetros de línea de órdenes, donde dice: "........La lista de parámetros se termina en cero; es decir, argv[argc]==0........."
Sin embargo no indica nada para los siguientes cout y el porqué no se presentan en pantalla.

Alguien que pudiera indicarme porque no funcionan los siguientes cout ¿?
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
sin imagen de perfil

cout<< No sale

Publicado por jose_luis (9 intervenciones) el 04/06/2017 11:33:18
Hola;

He descubierto que se trata de un error que argv[argc] provoca en cout. (ese carácter null que captura al final en la línea de comandos)

Si después del bucle doy la sentencia:
cout.clear();
me limpia el error de cout y ya si me sale.

Sin embargo, continuo con la curiosidad de averiguar que tipo de error se ha producido y darle una explicación o si se trata de una mala implementación del compilador conforme al standard de c++

Si alguien puede darle una explicación os lo agradezco. Gracias
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