elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Mensajes
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 160
281  Programación / Programación C/C++ / Re: Problema con EOF en: 30 Agosto 2014, 18:01 pm
Antes de utilizar la macro EOF debes incluir el encabezado <cstdio>.

Un saludo
282  Programación / Programación C/C++ / Re: Problema para usar system en C++ en: 28 Agosto 2014, 01:40 am
Utiliza la clase string (el encabezado a incluir tiene el mismo nombre) para generar la cadena, cuando llames a la función system obtienes la cadena "a la C" mediante la función miembro c_str. Mas o menos así:
Código
  1. string in = "mipagina.net";
  2. string cmd = "echo ping " + in;
  3.  
  4. // ...
  5.  
  6. system(cmd.c_str());

Y si necesitas mas información sobre la biblioteca estándar de C++ consulta la referencia en linea en C Plus Plus.

Un saludo
283  Programación / Programación C/C++ / Re: [Duda] Pasar struct por referencia en: 27 Agosto 2014, 02:50 am
Y si quiero pasar un arreglo de registros?
No entiendo la pregunta ya que eso es lo que estas haciendo en tu programa:
Código
  1. int main()
  2. {
  3.  
  4.   registro clientes[200];
  5.   int i;
  6.  
  7.  SetearReg(&clientes, &i);
  8. }
Por cierto no debes utilizar el operador "dirección de" (el '&') en la llamada a función y el segundo parámetro no es necesario. Y se debe utilizar la palabra reservada "struct" en la declaración del array a menos que lo estés compilando como C++.

Por ultimo lo único que debes hacer es revisar con cuidado la función "SetearReg" cortesía de Blaster y aplicar las correcciones a tu programa.

Un saludo
284  Programación / Programación C/C++ / Re: [Duda] Pasar struct por referencia en: 26 Agosto 2014, 08:20 am
Por supuesto que si ya que C no tiene referencias (pueden emularse mediante punteros).

Un saludo
285  Programación / Programación C/C++ / Re: [Duda] Pasar struct por referencia en: 26 Agosto 2014, 04:25 am
En C++ solo tienes que indicar en la declaración de la función que el parámetro en cuestión es una referencia con "&", por ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3.  
  4. struct punto {
  5.   int x;
  6.   int y;
  7. };
  8.  
  9. void leer_punto(punto& p);
  10.  
  11. // ...
  12.  
  13. int main()
  14. {
  15.   punto p;
  16.  
  17.   leer_punto(p);
  18.  
  19.   // ...
  20.  
  21.   return 0;
  22. }
  23.  
  24. void leer_punto(punto& p)
  25. {
  26.   cin >> p.x;
  27.   cin >> p.y;
  28. }

Un saludo
286  Programación / Programación C/C++ / Re: Ayuda con este código de archivos en: 26 Agosto 2014, 04:09 am
El problema se genera por la forma en que guardas los datos en el archivo:
Código
  1. /*Escribo el archivo*/
  2. printf("Introduzca nombre: ");
  3. gets(persona.nombre);
  4. fprintf(fichero,"%s",persona.nombre);
  5.  
  6. printf("Introduzca ciudad: ");
  7. gets(persona.ciudad);
  8. fprintf(fichero,"%s",persona.ciudad);
  9.  
  10. printf("Introduzca edad: ");
  11. scanf("%d",&persona.edad);
  12. fprintf(fichero,"%d",persona.edad);
  13.  
  14. fclose(fichero);
Por ejemplo si el nombre es "X", la ciudad "Y" y la edad "5" los datos se envían sin separación alguna como la secuencia "XY5".

Para solucionarlo debes enviar cada campo seguido de un avance de linea:
Código
  1. /*Escribo el archivo*/
  2. printf("Introduzca nombre: ");
  3. gets(persona.nombre);
  4. fprintf(fichero, "%s\n", persona.nombre);
  5.  
  6. printf("Introduzca ciudad: ");
  7. gets(persona.ciudad);
  8. fprintf(fichero, "%s\n", persona.ciudad);
  9.  
  10. printf("Introduzca edad: ");
  11. scanf("%d", &persona.edad);
  12. fprintf(fichero, "%d\n", persona.edad);
  13.  
  14. fclose (fichero);

Otros errores que debes corregir:

* Antes de utilizar la función exit debes incluir el encabezado <stdlib.h>.

* No puedes imprimir un entero (la edad) con la función puts:
Código
  1. fscanf(fichero,"%d",&persona.edad);
  2. puts(persona.edad);
En lugar de puts utiliza printf.

* Después de leer el ultimo campo de tipo int (de nuevo la edad) debes descartar el resto de la linea.

* La condición del bucle de lectura garantiza un iteración de mas, en otras palabras si tienes un registro se trataran de mostrar dos. Para evitarlo debes verificar (por lo menos) el resultado de la lectura del primer campo. Combinado con el punto anterior:
Código
  1. while (fgets(persona.nombre, 40, fichero) != NULL){
  2.   printf("%s", persona.nombre);
  3.  
  4.   fgets(persona.ciudad, 40, fichero);
  5.   printf("%s", persona.ciudad);
  6.  
  7.   fscanf(fichero,"%d",&persona.edad);
  8.   printf("%d\n", persona.edad);
  9.  
  10.   {
  11.      int ch;
  12.  
  13.      while ((ch = fgetc(fichero)) != EOF && ch != '\n')
  14.         ;
  15.   }
  16. }
  17. fclose(fichero);

Por ultimo debes evitar el uso de magic numbers y las funciones gets y feof. Mas información en la pagina |Lo que no hay que hacer en C/C++. Nivel basico|.

Un saludo
287  Programación / Programación C/C++ / Re: Como detectar un desbordamiento de enteros en: 23 Agosto 2014, 07:06 am
quisiera saber algún método para detectar un posible desbordamiento de enteros al realizar una multiplicación de dos variables de tipo unsigned para asi almacenar con seguridad el resultado en otra
a * b > MAX ==> a > MAX / b, b > MAX / a

Un saludo
288  Programación / Programación C/C++ / Re: Cuando utilizar signed y cuando unsigned (lenguaje C) en: 20 Agosto 2014, 05:30 am
Solo para redondear el tema.

Convertir el valor -1 a un tipo entero sin signo es la forma usual de obtener el valor máximo del tipo en cuestión sin tener que recurrir al encabezado <limits.h>. Esto porque cuando un valor con signo se convierte a uno sin signo y el valor esta fuera del rango valido (-1 lo esta) se le suma o resta (dependiendo del caso) MAX + 1 hasta obtener uno valido (-1 + MAX + 1 == MAX).

Otro caso problemático son las conversiones aritméticas (para mas información buscar el tema "Usual arithmetic conversions"), estas definen como debe obtenerse el tipo común en el cual se realizara la operación. Por ejemplo si los operandos de un operador relacional son de tipo signed int y unsigned int entonces el primero se convierte al segundo:
Código
  1. int a;
  2. unsigned b;
  3.  
  4. a = -1;
  5. b =  0;
  6. printf("%d < %u ? %s\n", a, b, a < b ? "Si" : "No"); /* -1 < 0 ? No */

Lo bueno es que la mayoría de los compiladores, al utilizarlos en su modo estricto, advierten sobre ese tipo de operaciones.

Un saludo
289  Programación / Programación C/C++ / Re: fallo al introducir datos!! en: 20 Agosto 2014, 04:29 am
tengo un problemiya al leer los datos, pongo el nombre y se acaba el programa porque pasa esto?
Porque, como ya te comento ivancea96, el campo nombre debe ser de tipo string, no char. Mismo caso con los campos laboratorio y proveedor.

y otra cosa, el getline es como se introduce una cadena en el string?
El operador ">>" se utiliza para leer y almacenar una palabra en un string, cuando se desea leer una linea de texto se utiliza getline. Esa función la debes utilizar para asegurarte de leer los campos mencionados completos.

Otro detalle importante es el uso intercalado del operador ">>" con getline, el problema ahí es que usualmente el operador ">>" ignora el espacio pero getline no lo hace. La solución es descartar el resto de la linea con, por ejemplo, la función miembro ignore.

Una forma mas sencilla pero que funciona solo en el caso base (cada linea terminada inmediatamente con el avance de linea) es:
Código
  1. cout << "NOMBRE: ";
  2. getline(cin, p[0].nombre);
  3.  
  4. cout << "CODIGO: ";
  5. cin >> p[0].codigo;
  6.  
  7. cout << "PRECIO: ";
  8. cin >> p[0].precio;
  9. cin.get();
  10.  
  11. cout << "DESCRIPCION: ";
  12. getline(cin, p[0].descripcion);
  13.  
  14. cout << "LABORATORIO: ";
  15. getline(cin, p[0].laboratorio);
  16.  
  17. cout << "PROVEEDOR: ";
  18. getline(cin, p[0].proveedor);
  19.  
  20. cout << "FECHA DE CADUCIDAD(INTRODUCIR DIAMESAÑO): ";
  21. cin >> p[0].fechacaducidad;

Por supuesto una vez leas los datos del registro debes hacer algo útil con ellos.

Un saludo
290  Programación / Programación C/C++ / Re: [SOLUCIONADO] Problema en un ejercicio de C++ en: 16 Agosto 2014, 17:42 pm
Revisando el bucle de la funcion miembro "calcularPromedio":
Código
  1. int suma=0;
  2. int valor=0;
  3. int numeroValores=0;
  4.  
  5. for (valor; valor != 9999;numeroValores+= 1){
  6.   cout <<"Escriba el valor: ";
  7.   cin >> valor;
  8.  
  9.   if (valor==9999){
  10.      numeroValores--;
  11.      continue;
  12.   }else {
  13.      suma+=valor;
  14.   }
  15. }
No tiene caso utilizar "valor" como la primera expresión del bucle y en el comparas en dos ocasiones "valor" con 9999 y modificas el valor de la variable "numeroValores" en (también) dos ocasiones. Si se cambia este por un bucle while puedes reducir el numero de expresiones al minimo:
Código
  1. int suma = 0;
  2. int valor;
  3. int numeroValores = 0;
  4.  
  5. while (true){
  6.   cout << "Escriba el valor: ";
  7.   cin >> valor;
  8.  
  9.   if (valor == 9999)
  10.      break;
  11.  
  12.   suma += valor;
  13.   numeroValores++;
  14. }


Un saludo
Páginas: 1 ... 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 [29] 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines