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

#1011
Cita de: Xedrox en 27 Diciembre 2012, 01:23 AMAlguien sabe porque me esta duplicando las "XXXX"? Solo estoy guardando una vez ese valor..
Porque fputs espera una cadena y tu le pasas la direccion de un caracter.

Un saludo
#1012
* Si la apertura del archivo falla no generes el mensaje de error manualmente, deja que la función perror se encargue de ello. Por ejemplo:
if ((ft = fopen(dat1, "r")) == NULL){
   perror(dat1);
   /* Manejo de error */
}

Por cierto dales nombres descriptivos a las variables, en lugar de "ft" puedes utilizar, por ejemplo, "nom_archivo".

* Debes verificar que el numero de columnas y filas leído del archivo (primer valor) sea igual o menor que la capacidad del array. Eso lo haces con una sentencia condicional "if".

* No utilices la función feof para controlar un bucle, en su lugar utilizas dos bucles para leer cada uno de los valores de la matriz. El limite en ambos bucles debe ser "m".

* Como ya te comentaron debes utilizar el operador "dirección de" (el '&') en la llamada a función o bien aritmética de punteros:
/* Con el operador "direccion de" */
fscanf(ft, "%f", &tab1[i][j]);

/* Con aritmetica de punteros */
fscanf(ft, "%f", tab1[i] + j);


Cita de: muymuyperdido en 26 Diciembre 2012, 15:36 PMEntonces como seria el codigo para volcar un archivo en una tabla?
Si juntas todo lo dicho en el tema mas un poco de iniciativa lo resuelves en poco tiempo.

Un saludo
#1013
El algoritmo que utilizas para ordenar el array no es Burbuja, es Selección. Si realmente quieres aplicar el algoritmo BubbleSort hay varios ejemplos en el foro, solo es cuestión de utilizar el motor de búsqueda.

Y si quieres aplicar alguna limitante a la ordenacion debes explicarte de una mas clara ya que no se entiende. Si nos puedes poner un ejemplo de la entrada y salida mejor.

Un saludo
#1014
Programación C/C++ / Re: [src]Hello world
25 Diciembre 2012, 17:45 PM
* Al utilizar el operador "dirección de" (el '&') con un array el puntero resultante es (en tu caso) de tipo "char (*)[N]" mientras que scanf espera un puntero de tipo "char *". Tal vez funcione pero el tipo no es el esperado por la función.

* En C una cadena es una secuencia de caracteres seguida del carácter '\0', este no es parte de la cadena, la delimita. Por ello si quieres almacenar las cadenas "Hello" y "World" necesitas dos arrays con una capacidad de seis caracteres (en tu ejemplo el primer array solo puede almacenar cinco).

* Utilizas scanf con el especificador "%s", ello es igual de malo que utilizar gets ya que la función lee y almacena todos los caracteres que pueda. En su lugar debes utilizar "%Ns" donde N es el numero de caracteres (menos uno) que se puede almacenar en el array. El "menos uno" es para reservar espacio para el delimitador, el '\0'.

Un saludo
#1015
Si apenas estas empezando con el lenguaje C++ no necesitas de un depurador, primero porque aun cuando este te indique donde esta el problema difícilmente vas a solucionarlo si no manejas bien el lenguaje (por definición es el caso) y segundo mientras menos variables en lo que concierne a tu aprendizaje mejor.

Los errores en el programa son dos: utilizar eof para verificar si se alcanzo el final del archivo y, por alguna extraña razón, tratas de liberar la memoria apuntada por el puntero (solo debes liberar la memoria reservada con new).

Con los cambios:
Código (cpp) [Seleccionar]
#include <iostream>
#include <string>
#include <fstream>
#include <sstream>

using namespace std;

int main()
{
   struct transaccion {
      string campo1;
      string campo2;
      string campo3;
      string campo4;
   };
   struct transaccion trx;
   
   ifstream input;
   input.open("Transacciones.txt", ios::in);
   char buffer[250];
   
   while (input.getline(buffer, 250)){
      char *auxSplit;
     
      auxSplit = strtok(buffer, ";");
      trx.campo1 = auxSplit;
      cout << trx.campo1 << "\n";
     
      auxSplit = strtok(NULL, ";");
      trx.campo2 = auxSplit;
      cout << trx.campo2 << "\n";
     
      auxSplit = strtok(NULL, ";");
      trx.campo3 = auxSplit;
      cout << trx.campo3 << "\n";
     
      auxSplit = strtok(NULL, ";");
      trx.campo4 = auxSplit;
      cout << trx.campo4 << "\n";
   }
   input.close();
   
   return 0;
}


Un saludo
#1016
C y C++ siguiendo sus respectivos estándares son portables a nivel de código fuente, aquí no hay problemas.

Pero si te refieres a los ejecutables no, no es posible.

Un saludo
#1017
El problema principal en esa función es el incremento de la variable "array_pointers", al hacerlo pierdes la dirección base. En su lugar:

1) Reservas el bloque de memoria principal, este lo utilizas para almacenar la dirección de memoria de cada cadena.

2) Utilizas un auxiliar para leer la linea. Para esta reservas un bloque de memoria del tamaño apropiado, copias ahí la cadena y guardas su dirección en el bloque principal.

3) Si el bloque principal se llena reajustas su tamaño con realloc.

La función con las correcciones:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUM_CHARS  4096

void delreves(FILE *entrada);

/* ... */

void delreves(FILE *entrada)
{
   char temp[NUM_CHARS];
   char **linea;
   int i;
   int max_lineas = 16;
   
   linea = malloc(max_lineas * sizeof *linea);
   
   i = 0;
   while (fgets(temp, NUM_CHARS, entrada) != NULL){
      linea[i] = malloc(strlen(temp) + 1);
      strcpy(linea[i], temp);
      i++;
     
      if (i == max_lineas){
         max_lineas *= 2;
         linea = realloc(linea, max_lineas * sizeof *linea);
      }
   }
   
   linea = realloc(linea, i * sizeof *linea);
   
   /* Procesamiento de las lineas ... */
   
   /* Liberacion de la memoria utilizada */
   while (i-- > 0)
      free(linea[i]);
   free(linea);
}

Por cierto no hay validaciones para reducir en lo posible el código fuente, eso te toca a ti.

Un saludo
#1018
Programación C/C++ / Re: warnings
23 Diciembre 2012, 03:09 AM
Cita de: m@o_614 en 22 Diciembre 2012, 01:53 AM
ahora ya no me aparece ese warning pero como ya le agregue la función de eliminar_elemento (en esta metí la función de buscar) pero no me hace lo que le pido
Como ya te comentaron:
A) Si el nodo a eliminar es el primero debes utilizar el parámetro de la función para así afectar la variable "cabeza" de la función main.
B) Para cualquier otro nodo solo hay que actualizar el campo "sig" del nodo anterior.

Para eliminar un nodo de una lista no es necesario utilizar variables auxiliares (en el bucle), en su lugar se trabaja directamente con el parámetro (y sirve para practicar el tema):
void eliminar_elemento(NODO **p)
{
   NODO *aux;
   int dato;
   
   puts("Dame el elemento a eliminar:");
   scanf("%d", &dato);
   
   while (*p != NULL && (*p)->dato != dato)
      p = &(*p)->sig;
   if (*p != NULL){
      aux = *p;
      *p = (*p)->sig;
      free(aux);
   }
}


Un saludo
#1019
Cuando tengas problemas con un programa por favor publicalo completo, no en partes.

Para empezar el algoritmo que utilizas no es Burbuja, es Selección.

En cuanto a este un problema es que solo intercambias el campo "numeroregistro" cuando deberías intercambiar los elementos (estructuras). Ese fragmento con los cambios:
struct {
   char nombreFich[41];
   unsigned long numeroregistro;
   unsigned long numeroserie;
} fichas[10], temp; /* temp debe ser del mismo tipo */

/* ... */

for (i = 0; i < numeroFichas - 1; i++)
   for (j = i + 1; j < numeroFichas; j++) {
      if (fichas[j].numeroregistro < fichas[i].numeroregistro){
         temp = fichas[j];
         fichas[j] = fichas[i];
         fichas[i] = temp;
      }

Así debe funcionar correctamente siempre y cuando no haya otros errores en la parte del programa que no publicaste (de ahí la recomendación de publicar el código fuente completo).

Un saludo
#1020
Cita de: n3t_3rr0r en 22 Diciembre 2012, 20:56 PMBueno quisiera algunas recomendaciones, sobre temas en general, lecturas, tutoriales, videos etcetera pero que se apliquen a la programacion bajos sistemas operativos GNU/Linux o UNIX..
Puedes empezar aprendiendo C estándar, esa es la parte garantizada del lenguaje y te sirve sin importar el compilador y SO utilizado. Y para recomendaciones de libros lo mejor es utilizar el motor de búsqueda de los foros.

Un saludo