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

#1221
Programación C/C++ / Re: suma matrices
20 Agosto 2012, 03:48 AM
Cita de: daniyo en 18 Agosto 2012, 23:37 PMYo estoy casi seguro de que no se puede declarar un arreglo con tamaño variable, hay que usar una expresion constant, para eso debes usar memoria dinamica.
En C una declaración como esta:
printf("dimensi\xA2n de la matriz1:");
scanf("%d",&n);

int matriz1[n][n];

No es valida si se compila según el estándar C90, este requiere que el numero de elementos en un array se indique mediante una expresión constante.

Pero en los dos siguientes estándares de C (C99 y C11) si es posible, a esos arrays donde el numero de elementos se calcula en tiempo de ejecución se les conoce como "variable length arrays" o "VLAs".

Un saludo
#1222
Para la pregunta en lo general ¿Que aplica en el tamaño de un objeto en C++? solo tienes que revisar la pagina indicada cortesía de avesudra.

Y sobre tu pregunta en concreto:
Cita de: Xafi en 20 Agosto 2012, 00:52 AMLas dos salidas dan 4 bytes.
alguien me puede explicar esto si estoy reservando 100 en la array.
Ello se debe a que estas calculando el tamaño de un puntero (la variable "I" es de tipo "Item *"), deberías utilizar "sizeof(Item)".

Un saludo
#1223
Cita de: espdante en 20 Agosto 2012, 02:47 AMda la casualidad que todos los libros que leo van dedicados a gente que sabe otro lenguaje y les cuesta menos asimilarlo.
En ese caso empieza con una aplicación enfocada en los conceptos generales de programación como PSeInt. Una vez domines los fundamentos pasas a un lenguaje de propósito general como C++.

Un saludo
#1224
Programación C/C++ / Re: Consejo [Comparar]
18 Agosto 2012, 03:51 AM
Cita de: Magiwuan en 17 Agosto 2012, 21:51 PMQue estaré haciendo mal? mientras tanto estoy leyendo y probando algunos métodos.
Publica el programa con las modificaciones.

Un saludo
#1225
Cita de: apoeti en 11 Agosto 2012, 16:23 PMHola, soy yo otra vez con un  problema con los ejercicios de "Aprendiendo C en 21 días".
Revisando de forma superficial ese libro tiene ciertos detalles (como el uso de "gets" y "scanf" en el capitulo sobre entrada y salida) que, honestamente, me parecen suficiente como para no recomendarlo a un principiante.

Una mejor opción es "The C programming Language", otro libro muy bueno pero disponible solo en ingles es "Pointers on C" de Kenneth Reek.

Un saludo
#1226
Cita de: netca en 12 Agosto 2012, 00:14 AMTengo la siguiente estructura , y en el main cuando voy a imprimir solo imprime el primer elemento , se que tiene que ver algo con el malloc y la inicializacion de la lista pero no se como hacerlo y tampoco se porque me ocurre esto.
La respuesta a porque no funciona ya la tienes cortesía del mensaje de xiruko

Y si no tienes un curso de calidad sobre listas vinculadas en C uno muy bueno (pero en ingles) lo puedes descargar desde la pagina de la Stanford CS Education Library.

Un saludo
#1227
En C no puedes utilizar el operador de asignación "=" con arrays, en su lugar debes utilizar la función "strcpy" (prototipo en <string.h>).

Un saludo
#1228
Cita de: BlackZeroX (Astaroth) en 11 Agosto 2012, 08:06 AMSi no me equivoco usar cin  con un array de char es lo mismo que usar gets() con el array char (corrijan-me)... lo mejor seria usar el tipo string si se esta en C++.
Es correcto.

En el sitio C Plus Plus se describe en detalle el operador "<<", la sección que nos incumbe:
CitarExtracts characters and stores them as a c-string (i.e. in successive locations starting at location pointed by str and terminated by a null-character). Extraction ends when the next character is either a valid whitespace or a null character, or if the End-Of-File is reached. The terminating null character is automatically appended after the extracted characters.

The extraction operation can be limited to a certain number of characters (thus avoiding the possibility of buffer overflow) if the field width (which can be set with ios_base::width or setw) is set to a value greater than zero. In this case, the extraction ends one character before the count of characters extracted reaches the value of field width, leaving space for the ending null character. After a call to this extraction operation the value of the field width is automatically reset to zero.

Un saludo
#1229
Programación C/C++ / Re: Duda gets()
10 Agosto 2012, 18:27 PM
En mi opinión un buen libro sobre C no debería tener ese tipo de ejemplos. No se recomienda el uso de la función "gets", la razón de ello se encuentra en uno de los temas fijos en el foro. Mismo caso con la función "scanf" cuando se utiliza en la forma:
char name[20];

/* ... */

puts("Enter your first name.");
scanf("%s", name);

Ya que el riesgo es el mismo: no hay forma de limitar el numero de caracteres que se almacenan a partir de la dirección indicada.

Cita de: apoeti en 10 Agosto 2012, 16:23 PMSegún lo que me habéis dicho, el scanf(), no recoge el '\n' y siempre lo deja en el teclado ¿Es eso cierto?
Usualmente si.

Una respuesta mejor es: depende del especificador de formato (por ejemplo "%d", "%s", etc.) utilizado.

Con todos ellos (salvo "%c" y "%[]") lo primero que hace la función es descartar el espacio blanco (espacio, tabulador, etc.). A continuación la función consume todos los caracteres que cumplan con el especificador (como ya te comento xiruko ), eso continua hasta cumplir con lo indicado o se encuentre un carácter invalido (el cual se queda en el bufer de la entrada estándar).

Un ejemplo de esto ultimo, una forma mas segura es:
char name[20];

/* ... */

puts("Enter your first name.");
scanf("%19s", name);

Así la función descarta el espacio blanco, lee y almacena los caracteres (una palabra) en el array (máximo 19). Por ultimo almacena el '\0'.

Un saludo
#1230
Si debes asignar el valor cero varias veces en el programa lo mejor es utilizar la función "memset".

Por otra parte si solo deseas esa asignación como valor inicial puedes utilizar:
fichaPersona Alumnos[20] = {{0}};
Con ello en todos los elementos del array sus campos se inicializan con 0 (o 0.0 o NULL, de acuerdo al tipo de cada uno).

Un saludo