Parámetros en main y función Sleep()

Iniciado por Saberuneko, 5 Junio 2012, 09:52 AM

0 Miembros y 1 Visitante están viendo este tema.

Saberuneko

Buenas, vuelvo de nuevo con más dudas.

En esta ocasión estoy tratando de mostrar una cadena, letra a letra, de momento, el siguiente code me funciona correctamente:

Código (cpp) [Seleccionar]
//For WIN systems, use the header windows.h
//For NIX systems, use the header unistd.h

#include <iostream.h>
#include <string.h>
#include <windows.h>

using namespace std;

int main()
{
string str1 = "This is only a test";
int count;
int limit;

limit = str1.length() - 1;
for (count = 0; count <= limit; count++)
{
cout << str1.at(count);
Sleep(50);
}
}


Ahora bien, tengo dos dudas:

1.- El compilador (Dev-C++) me muestra esta advertencia:
Citar32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.

La cual me lleva a deducir que la cabecera que estoy utilizando (windows.h o unistd.h, dependiendo del sistema) puede no ser la más apropiada. ¿Alguien podría decirme si DevC++ incluye alguna con una función igual a Sleep()?

Si vale de forma universal, independientemente del OS, sería incluso mejor que las que uso actualmente, que son dependientes del OS.

2.- He intentado hacer que este pequeño programita reciba dos parámetros, un int (con el tiempo en milisegundos entre letra y letra), y la cadena a mostrar.

Tras unos intentos lo he dejado tal que así:

Código (cpp) [Seleccionar]
#include <iostream.h>
#include <string.h>
#include <windows.h>

using namespace std;

int main(int interval=50, string str1)
{
// string str1 = "This is only a test";
int count;
int limit;

limit = str1.length() - 1;
for (count = 0; count <= limit; count++)
{
cout << str1.at(count);
Sleep(interval);
}
}


Pero no me funciona...

Extrañamente, si introduzco un cout para mostrarme los valores de los parámetros introducidos (interval y str1)...

Código (cpp) [Seleccionar]
cout << interval;
cout << str1;


Devuelve lo siguiente, dependiendo de la entrada:

interval:
1 : si no introduzco parámetro
2 : si introduzco parámetro (cualquiera)
str1:
1.4013e-045: si no introduzco parámetro
2.8026e-045: si introduzco parámetro (cualquiera)

Los cuales, evidentemente no son los valores que deberían de entrar.

¿En qué puedo estar fallando esta vez?

Un Saludo, y miauchísimas gracias por adelantado.

x64core

Que yo sepa para pasar argumentos en la funcion main es así:
main(int argc, char *argv[]);

seguramente tenes problemas de direccionamiento con los punteros, has prueba con ese prototipo y cuentas
y si tu intensión es otra tambien...
respecto al mensaje del compilador ahí mismo te esta diciendo sobre el .h de la cabecera seguramente con agregarle el ".h" se
arregla... la verdad no sé porque no utilizo dev... por cierto eso te compila con dev-cpp?  :o :)

Saberuneko

#2
Tras un experimento extremadamente simple para intentar refrescarme respecto a los parámetros...

Código (cpp) [Seleccionar]
#include <iostream.h>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
cout << argv[1];
cout << argv[2];
cout << argv[3];
}


¡COMODO AntiVirus me ha detectado el .exe generado al compilar como una amenaza! Ya les he enviado un ticket, porque esta es la gota que colmó el vaso...
Si ésta no fuese la máquina del trabajo, ya le habría cambiado el AV hace mucho.
Sin comentarios.


Bueno, el caso, respecto a los headers, lo que quiero no es quitar el warning, sino que lo que me interesa es saber si existe algún header que no esté "anticuado", como indica mi compilador.

El hecho de quitar .h particularmente en #include <windows.h>, hace que no se reconozca la función Sleep(), así que no me vale.

Respecto a la compilación, si, ambos códigos me compilan, el primero ejecuta sin problemas, el segundo no... me da el típico error:

CitarThis application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Tras ejecutrarlo.

A ver qué es lo que he roto esta vez como para que me salte el AV...

Un Saludo.

Ferno

No es de la librería windows.h de donde debes sacar el .h, sino del iostream.

Código (cpp) [Seleccionar]
#include <iostream>
#include <string.h>

using namespace std;

int main(int argc, char *argv[])
{
cout << argv[1];
cout << argv[2];
cout << argv[3];
}

Saberuneko

Ok, saqué el .h del iostream y ya no da problemas, pensaba que era windows.h el header que se consideraba como obsoleto.

Avancé algo más, no es exactamente lo que quiero, pero se acerca más...
Hay que ejecutar el programa en sí primero y luego meter los parámetros.

Pero al menos se introducen con el formato que quería:
:> <intervalo> <string>

Código (cpp) [Seleccionar]
//For WIN systems, use the header windows.h
//For NIX systems, use the header unistd.h

#include <iostream>
#include <string.h>
#include <windows.h>

using namespace std;

void sayline(string strx, int intx)
{
int count;
int limit;

limit = strx.length() - 1;
for (count = 0; count <= limit; count++)
{
cout << strx.at(count);
Sleep(intx);
}
}

int main()
{
char str1[256];
int interval;

cout << ":>" << endl;
cin >> interval;
cin.getline(str1, 256);

sayline(str1, interval);
}

0xDani

Tambien deberias usar cstring en vez de string.h

Saludos ;D
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM