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

#531
Es un tema duplicado, ya le están ayudando en su otro tema: Problemas con los ficheros

En cuanto a fstream es parte de la biblioteca estándar de C++.

Un saludo
#532
Cita de: Wire3 en 17 Diciembre 2013, 23:08 PME estado leyendo mucho sobre el tema,e recopilado vastantes pdfs.manuales,libros y de mas.. Pero aun asi no estoy seguro de si esta bien empezar con C/C++ como primer lenguaje de programación
Si bien C y C++ tienen similitudes son lenguajes distintos y lo primero que deberias hacer es decidirte por uno.

Es posible aprender uno como primer lenguaje de programación pero requiere un esfuerzo adicional por algunas de sus características, la mas conocida es el manejo de direcciones de memoria (punteros).


Cita de: jednak en 17 Diciembre 2013, 23:48 PMLeer libro de kernighan y ritchie(El leguaje de programacion C) OBLIGATORIO.
Cita de: amchacon en 26 Diciembre 2013, 13:07 PM
Yo no lo he leído y no me considero un idiota en C, valga la modestia.
Obviamente la lectura de K&R2 no es obligatoria, yo supongo el comentario va mas en la linea de ser uno de los libros mas recomendados para aprender C.


Cita de: amchacon en 26 Diciembre 2013, 13:07 PMAdemás esos libros suelen estar muy anticuados, ya han salido nuevos estandares
Depende de que libro. En el caso de "K&R2" y "Pointers on C" su calidad pedagógica se mantiene a pesar de la edad (no tengo conocimiento  de uno sobre C11 a la misma altura) y nada impide aprender (bien) C90 y a continuación actualizarse a C11.

Cita de: jednak en 17 Diciembre 2013, 23:48 PMLeer libro de kernighan y ritchie(El leguaje de programacion C) OBLIGATORIO.
Cita de: dato000 en 18 Diciembre 2013, 00:22 AM
Aunque es una referencia obligatorio, es un libro muy avanzado, no es material introductorio
Lo es. K&R2 es un libro para aprender C desde cero empezando con un mini-tutorial seguido de capítulos enfocados en operadores, funciones, punteros, etc. El "problema" con el se debe a que las explicaciones son precisas pero cortas y esa falta de detalle a algunos les causa dificultades.

Un saludo
#533
Cita de: DanielC# en 26 Diciembre 2013, 16:16 PMUna pregunta más, tu ultimo código se puede aplicar de esta manera.
char *frase[] = {"aveja", "Aveja"};
Primero tienes que explicar de una forma clara a que te refieres con "aplicar de esta manera", si te refieres a la comillas estas deben ser "comillas planas sin chiste".

Un saludo
#534
Cita de: terrateck en 25 Diciembre 2013, 21:36 PMSin embargo al imprimir al final las dos últimas fechas, los valores que se obtienen son exactamente iguales. No entiendo por qué al ejecutar tinfo2=localtime(&t2) la estructura t1 también se ve alterada
Es un error lógico. El problema no son las variables t1 y t2 sino tinfo1 y tinfo2.

La documentación de la función "localtime" es:
Citarlocaltime

struct tm *localtime(const time_t *tod);

The function stores in the static-duration time structure an encoding of the calendar time in *tod, expressed as local time. It returns the address of that structure.
Ella retorna la dirección de un objeto interno con clase de almacenamiento estático, esto es, se crea justo antes de llamarse a la función main y se destruye al finalizar el programa, por eso la dirección que retorna en cada llamada es la misma. Puedes comprobarlo imprimiendo la dirección de esos dos punteros justo antes de terminar tu programa.

Para que tenga el comportamiento que indicas debes evitar el uso de punteros, de esta forma:
#include <stdio.h>
#include <time.h>

#include <windows.h>

#define TFECHA 30

int main(void)
{
   time_t t1, t2;
   struct tm tinfo1, tinfo2;
   char f1[TFECHA],f2[TFECHA];
   
   time(&t1);
   tinfo1 = *localtime(&t1);
   strftime(f1, TFECHA, "%d/%m/%Y %H:%M:%S", &tinfo1);
   printf("%s\n", f1);
   
   Sleep(5000);
   
   time(&t2);
   tinfo2 = *localtime(&t2);
   strftime(f1, TFECHA, "%d/%m/%Y %H:%M:%S", &tinfo1);
   strftime(f2, TFECHA, "%d/%m/%Y %H:%M:%S", &tinfo2);
   printf("%s\n%s\n", f1,f2);
   
   return 0;
}


Un saludo
#535
Cita de: DanielC# en 24 Diciembre 2013, 00:19 AMPor fin puedo demostrar con este programita lo que pretendía hacer, sólo que todavía no pude hacerlo con array de puntero a char
Sin animo de ofender pero en este tema desde mi primera respuesta tienes un ejemplo sobre como intercambiar el valor de dos punteros (por supuesto elementos de un array):
#include <stdio.h>
#include <string.h>

int main(void)
{
   char *frase[] = {
      "abeja",
      "Abeja"
   };
   int i;
   
   if(strcmp(*frase, *(frase + 1)) > 0){
      char *temp = frase[0];
      frase[0] = frase[1];
      frase[1] = temp;
   }
   
   for (i = 0; i < 2; i++)
      printf(" %s", frase[i]);
   putchar('\n');
   
   return 0;
}


Para que sea casi igual a tu ultimo programa solo hay que realizar algunos cambios:
#include <stdio.h>
#include <string.h>

int main(void)
{
   char *p = "abeja";
   char *q = "Abeja";
   
   if(strcmp(p, q) > 0){
      char *temp = p;
      p = q;
      q = temp;
   }
   
   printf("%s %s\n", p, q); /* Abeja abeja */
   
   return 0;
}


Un saludo
#536
Programación C/C++ / Re: fgetc()
25 Diciembre 2013, 15:36 PM
Cita de: m@o_614 en 25 Diciembre 2013, 08:54 AMtengo la duda de si fgetc puede aceptar argumentos de otros tipos como char*?
No.

Para procesar los caracteres de una cadena utilizas los operadores "[]" y "*" así como las funciones declaradas en el encabezado <string.h>.

Un saludo
#537
Programación C/C++ / Re: uso de strcat
22 Diciembre 2013, 22:07 PM
Cita de: m@o_614 en 22 Diciembre 2013, 16:18 PMuna última duda, como en el codigo primero le pido el valor de car y despues le hago un "cast" con sprintf para que sea una cadena, no seria mejor si simplemente  quitar el sscanf y el sprintf, me quedo con el fgets y despues se lo concateno a con strcat
Ya que el programa solo colecta caracteres para formar una cadena basta con scanf:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int i;
   char *p;
   
   p = malloc(6);
   for (i = 0; i < 5 && scanf(" %c", p + i) == 1; i++)
      ;
   p[i] = '\0';
   
   printf("%s\n", p);
   
   return EXIT_SUCCESS;
}


Un saludo
#538
Programación C/C++ / Re: Consulta argumentos
22 Diciembre 2013, 02:15 AM
Cita de: elProfeta1979 en 21 Diciembre 2013, 18:36 PMmi pregunta es: ¿sí es una función donde siempre se le pasan cadenas de caracteres para que poner punteros genéricos
Porque la función sera llamada por qsort, su prototipo es:
qsort(void *elem, size_t num_elem, size_t elem_size, int (*cmp)(void const *pa, void const *pb))
Con el se indica que el cuarto argumento sera un puntero a función cuyo tipo de retorno es int y sus dos argumentos de tipo "void *", esto para que la función sea genérica ya que no puede saber de antemano el tipo del array a ordenar.

Un saludo
#539
Programación C/C++ / Re: Compilador C++
22 Diciembre 2013, 01:58 AM
Dos opciones son Visual C++ 2008 Express (XP) y la versión de g++ para Cygwin (solo para XP SP3).

Un saludo
#540
Programación C/C++ / Re: uso de strcat
22 Diciembre 2013, 01:46 AM
Cita de: m@o_614 en 21 Diciembre 2013, 20:27 PMvi que mi error era en que no le habia asignado memoria a la cadena, pero ahora por ejemplo si le ingreso las letras a, b, c, d, e. cuando le pido que imprima ya la cadena completa me imprime con basura #Wqabcde
1) Cuando reservas un bloque de memoria con malloc su contenido es no definido o basura.

2) strcat concatena las cadenas agregando la segunda al final de la primera. Para ello debe primero encontrar el carácter '\0' que indica el final de esta.

3) Si piensas leer cinco caracteres y almacenarlos como una cadena debes reservar un byte adicional para almacenar ahí el terminador de cadena '\0'.

En base a ello ya puedes solucionar el problema en tu programa.

Un saludo