|
783
|
Programación / .NET (C#, VB.NET, ASP) / Re: Hacer cambios de este código.
|
en: 25 Enero 2017, 13:31 pm
|
Si lo que quieres es responderle al Arduino tras recibir el número, pues nada, es eso. Tras enviar el número, el Arduino tendrá que esperar la respuesta. NO sé qué es exactamente lo que no sabes hacer (solo es enviar, esperar y recibir, al fin y al cabo)
Otra opción es recibir el número en una cantidad de bytes fija. Es decir, 2 posibilidades: 1) Enviar el número "en binario". Un int son 4 bytes, así que solo tendrías que leer 4 bytes. (Si nunca trabajaste con datos binarios, puedes saltarte esta opción temporalmente) 2) Enviar, por ejemplo, 8 caracteres fijos, y rellenarcon ceros: 00015678<datos>.
También puedes poner un delimitador: 15678;<datos> Pones el punto y coma (o cualquier caracter no-numérico) después, y ya sabes cuando dejar de leer el número.
|
|
|
785
|
Programación / Programación C/C++ / Re: funcion que devuelve un puntero de una variable static
|
en: 24 Enero 2017, 21:52 pm
|
No inicializas c* Y bueno, static es útil pero, intenta no abusar xD static char s[i];
Eso te va a generar un array de longitud i la primera vez que se llame a la función, y tendrá ese tamaño siempre. Deberías suar memoria dinámica qsi quieres que sea dinámico. Edito: Diría que la declaración static de ese array es ilegal, así que evítala. Punteros, memoria dinámica es la solución.
|
|
|
786
|
Programación / Programación C/C++ / Re: funcion que devuelve un puntero de una variable static
|
en: 24 Enero 2017, 21:23 pm
|
int* getArray(unsigned int size){ static int* array = nullptr; if(array != nullptr){ delee[] array; } array = new int[size]; return array; }
Por ejemplo, ahí tienes una función que te da un array de X tamaño de cuya memoria no tienes que preocuparte (es un ejemplo trivial y poco útil, pero es un ejemplo). Otra posibilidad es almacenar un estado. Por ejemplo, un generador de números aleatorios: #include <ctime> #include <iostream> using namespace std; int random(int newSeed = -1){ static int seed = 4974654; if(newSeed != -1) seed = newSeed; else seed = (seed + 784513)%530789; return seed; } int main(){ random(time(0)); for(int i=0; i<10; i++) cout << random()%10 << endl; }
|
|
|
787
|
Programación / Programación C/C++ / Re: Implementar metodos de una clase anonima
|
en: 24 Enero 2017, 20:29 pm
|
Nunca se me dio este caso (no es nada recomendable hacer una clase anónima y definir luego sus miembros fuera, no debería haber razones apra ello). En cualquier caso, te propongo una posibilidad: void decltype(o)::foo(){ // ... }
decltype, de C++11, obtiene en tiempo de compilación el tipo de lo que le metas dentro. Por ejemplo: int n = 5; decltype(n) j = 7;
Ambos son int. Puedes usarlo, admeás, en templates o macros.
|
|
|
788
|
Programación / Programación C/C++ / Re: funcion que devuelve un puntero de una variable static
|
en: 24 Enero 2017, 20:21 pm
|
La idea del static es que el dato se mantenga de llamada a llamada pero solo sea accesible para esa función. Si sabes que debes usar ese dato fuera de la función hazlo global.
Lo que comenta el fafafa01 también es posible, y se puede utilizar para evitar que el programador que utilice la función se preocupe por la memoria. Por ejemplo, una variable static es una posible forma de hacer la función localtime de la librería time.h/ctime: http://www.cplusplus.com/reference/ctime/localtime/A parte de static, otro especificador remarcable es thread_local, que funciona como static, solo que cada nuevo thread tendrá su propia variable.
|
|
|
789
|
Programación / Programación C/C++ / Re: Forma de evaluación de los operandos de un operador.
|
en: 24 Enero 2017, 17:41 pm
|
http://en.cppreference.com/w/cpp/language/operator_precedenceEsos casos no dan mucho pié a error. Un post-incremento no se ejecuta hasta el final de la instrucción/línea (de forma genérica). Ese (i++) que pusiste, no es el operator(). "i()" es el operator (), que es como una llamada a función. Rodear unas operaciones con () no es un operador. Simplemente haces que ese bloque se ejecute completo (cuando se necesite) antes de continuar evaluando. Para probar estas cosas de forma práctica, siempre puedes crear una clase para ello: #include <iostream> using namespace std; class Test{ public: Test operator+(const Test& test){ cout << " +"; } Test operator++(){ cout << " ++_"; } Test operator++(int){ cout << " _++"; } Test operator[](const Test& test){ cout << " []"; } Test operator=(const Test& test){ cout << " ="; } operator int(){ cout << " int"; } }; int main(){ cout << "Order:"; Test a,b; a[++a] = b++; cout << endl; (int)(a+b); cout << endl; (int)a+b; cout << endl; }
|
|
|
790
|
Programación / Programación C/C++ / Re: Duda en código.
|
en: 22 Enero 2017, 23:09 pm
|
Es difícil responder a esto.
Dices que es un juego, así que intuyo que tendrás algún tipo de bucle principal. Podría ser ahí donde lo hagas (llamar a una función que lo actualice si han pasado 5 segundos, por ejemplo)
|
|
|
|
|
|
|