Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - rir3760

#331
Cita de: Drewermerc en 10 Mayo 2014, 05:42 AMentonces el operador solo se puede usar con estructuras.
entonces es o mismo poner
cad2 = cad1;
que esto
cad2 -> cad1;
No, no es lo mismo.

El operador de asignación lo puedes utilizar con estructuras pero no con arrays. Una soluciona a medias a la copia de arrays es colocar estas dentro de estructuras, de esa forma al copiar la estructura se copia el array (que se utilice el operador "->" es tema aparte).

Por ejemplo:
#include <stdio.h>
#include <stdlib.h>

struct aux {
   char nombre[100];
};

int main(void)
{
   struct aux a = {"Hugo"};
   struct aux b = {"Paco"};
   
   printf("%s, %s\n", a.nombre, b.nombre); /* Hugo, Paco */
   a = b;
   printf("%s, %s\n", a.nombre, b.nombre); /* Paco, Paco */
   
   return EXIT_SUCCESS;
}


----

Cita de: Drewermerc en 10 Mayo 2014, 05:42 AMpor que en este codigo no escribe la segunta linea ya intente varias formas pero no logro escribir una lineas mas.
Algo habrás hecho con el programa ya que si bien tiene deficiencias el contenido de los dos bloques de memoria se envía al archivo.

Un saludo
#332
Programación C/C++ / Re: A que equivale...
10 Mayo 2014, 03:05 AM
Cita de: David8 en  9 Mayo 2014, 19:22 PMEs que por ejemplo cuando tengo una función que recibe un parámetro que es por ejemplo
const char *nombre[]
y lo cambio por
const char **nombre
no me dice nada
En C todo se pasa por valor, cuando llamas a una función antes que el cuerpo de esta se ejecute cada uno de los parámetros (variables locales a la función) se inicializa con el argumento correspondiente (valores utilizados en la llamada).

La única excepción son los arrays, con estos cuando se llama a una función el valor que se pasa es la dirección en memoria del primer elemento, un array de tipo "T [N]" genera un valor de tipo "T *" donde T es el tipo de los elementos.

Si tu declaras una función de esta forma:
int fn(char *mat[100]);
Por lo anterior (N es 100, T es "char *") la declaración en realidad es:
int fn(char **mat);

Un saludo
#333
Programación C/C++ / Re: A que equivale...
9 Mayo 2014, 04:28 AM
Cita de: David8 en  8 Mayo 2014, 21:35 PMPara acceder a un elemento j de ese miembro en una estructura i uso
(jugador + i) -> cadena[j];

Mi pregunta es, ¿Cómo represento lo anterior como notación completa de punteros?
Utilizas:
*((jugador + i)->cadena + j)

Un saludo
#334
Cita de: davis1308 en  8 Mayo 2014, 03:12 AMestamos aún en el uso de ciclos for y me pusieron un programa el cual no entiendo. les quiero pedir el favor de explicarme
Te piden desarrollar un programa cuya parte principal es un bucle for que itera (se repite) cinco veces, en cada iteración debes presentar el menú junto con el saldo actualizado, pedir la opción al usuario, procesarla y pasar a la siguiente iteración.

Un saludo
#335
Cita de: engel lex en  8 Mayo 2014, 01:37 AM
no hagas doble post
Cita de: vangodp en  8 Mayo 2014, 01:53 AM
As vece pasa de que el navegador envía 2 mensaje en vez de uno no es que haga a propósito.
Es a propósito y no son dos, son tres, el primero fue publicado el 4 de Mayo: Lenguaje C temas (en orden) que debo aprender para dominar este Lenguaje?.

Si alguien desea responder a la pregunta lo mejor en este caso es utilizar el tema que mencione, ello mientras el moderador decide que hacer con los dos temas del 7 de Mayo (cerrarlos o borrarlos).

Un saludo
#336
Cita de: #Aitor en  7 Mayo 2014, 15:06 PMPero no entiendo:
Código (c++) [Seleccionar]
  max = argc - 1;
Por qué el numero de argumentos -1?
Porque argc es el numero de argumentos incluyendo el nombre del programa, como este no lo vas a procesar se resta uno.

Cita de: #Aitor en  7 Mayo 2014, 15:06 PMy referente a lo que me cuentas rir3760, el código tiene punteros? lo digo por el *p aún no estudié eso.
El problema es que argv es de tipo "char **", utilices el operador "*" o "[]" ya están trabajando con punteros.

Cita de: #Aitor en  7 Mayo 2014, 15:06 PMMe vuelvo a perder en lo de argv[argc - 1], por qué no seguir la lógica y argv[ 2 ]
Porque no puedes saber de antemano el numero de argumentos que se pasaran al programa.

Un saludo
#337
Cita de: #Aitor en  7 Mayo 2014, 05:23 AMEl problema se encuentra en la linea 23, básicamente, antes usaba Getline para así leer toda la linea, y que el string no se parase al leer el espacio, ahora el problema está en que al ejecutarlo por consola,  únicamente lee hasta el espacio y no encuentro forma de usar el getline como argumento.
Cuando se llama a tu programa con, por ejemplo:
nombre_del_programa arg_1 arg_2 arg_3
El nombre de este se almacena en argv[0] y los argumentos de la linea de comandos son las palabras que siguen y se acceden con argv[ 1 ] .. argv[argc - 1] (argv[argc] es NULL).

La solución fuera de tu programa es indicar que se pasa un solo argumento, para esto los delimitas con comillas dobles:
nombre_del_programa "arg_1 arg_2 arg_3"

La solución dentro del programa (no hay forma de recuperar el espacio blanco) es crear la cadena manualmente, solo tienes que concatenar todos los argumentos pasados mediante la linea de comandos, una forma es:
Código (cpp) [Seleccionar]
#include <iostream>
using std::cout;
using std::endl;

#include <string>
using std::string;

int main(int argc, char *argv[])
{
   if (argc > 1){
      string linea = argv[1];
     
      for (char **p = argv + 2; *p; p++)
         linea = linea + ' ' + *p;
     
      cout << linea << endl;
   }
   
   return 0;
}


Un saludo
#338
Otras partes que se deben cambiar:

* Las variables "x" y "y" deben ser locales a la función main, tienes la declaración de estas duplicadas al inicio del programa y en la sentencia switch.

* Faltan los nombres de los parámetros de las funciones.

* Todos los casos inician con:
Código (cpp) [Seleccionar]
cout << "\n\n  Introduzca el valor 'x': " << endl;
cin >> x;
cout << "\n\n  Introduzca el valor 'y': " << endl;
cin >> y;

Hay que sacar ese bloque y colocarlo dentro de un condicional, de esta forma:
Código (cpp) [Seleccionar]
bool mala_opcion = false;
while (!mala_opcion){
   cin >> eleccion;
   
   if (eleccion >= 1 && eleccion <= 4){
      cout << "\n\n  Introduzca el valor 'x': " << endl;
      cin >> x;
      cout << "\n\n  Introduzca el valor 'y': " << endl;
      cin >> y;
      mala_opcion = true;
   }
   switch (eleccion) {
   case 1:
      sumar (x, y);
      break;
   case 2:
      restar (x, y);
      break;
   case 3:
      multiplicar (x, y);
      break;
   case 4:
      dividir (x, y);
      break;
   default:
      cout << "\n  Has introducido un comando incorrecto, vuelva a repetir." << endl;
      break;
   }
}


Un saludo
#339
Cita de: r_fercho en  5 Mayo 2014, 04:54 AMestoy aprendiendo lenguaje C  por mi cuenta, a traves de Youtube y otros videotutoriales de la web, pero tengo una duda inmensa, cuales temas estudiar y en que orden?
En lugar de videos te recomiendo un buen libro como "The C Programming Language" o "Pointers on C", en el caso del primero este empieza con un minitutorial para conocer lo básico de ciertos temas y desarrollar los primeros programas. Después de ello van capítulos para los temas a detalle:

Tipos, operadores y expresiones
Control de flujo
Funciones y programación modular
Punteros y arrays
Estructuras
Entrada y salida

El libro termina con una descripción abreviada del lenguaje (mas corta pero mas fácil de leer que el estándar).

Un saludo
#340
Por eficiencia deberías sacar la comprobación fuera del bucle, de esta forma:
for (i = 0; i < n - 1; i++)
   printf("%lf, ", v[i]);
printf("%lf]\n", v[i]);

En el raro caso de que el numero de elementos pueda ser menor o igual a cero debes verificar eso antes de imprimir el ultimo elemento

Cita de: LaLakers94 en  5 Mayo 2014, 11:48 AM¿el funcionamiento de '\b' consiste en suprrimir el último caracter? Por ejemplo con la cadena s = "Hola me gustan los Lakers.\n'' podría eliminar el salto de línea concatenándole '\b' a la cadena?
No. El efecto de '\b' solo aplica si envías la cadena a la salida estándar, no funcionara si la cadena la almacenas en otro array o la envías a un archivo.

Un saludo