Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





dudas: una de funciones y una de ficheros

Iniciado por Zeigon, 10 de Enero de 2003, 08:57:07 PM

« anterior - próximo »

Zeigon

                                Tengo un par de dudas más q espero q se resuelvan para el montón  :D :

1) si tengo una función q quiero q devuelva dos valores (ó 3, ó 4...) como lo hago, pq si lo pongo así tanto en la definición como en la declaración, como q sólo se puede devolver uno, no?:

int funcion (int,int)


2) la forma en q los datos se meten en un archivo es uno detrás de otro, no? sea en "modo texto" (al ver el archivo se ven bien los datos) o en "modo variable"(al ver el archivo se ven simbolos raros). quiero decir q lo de secuencial y aleatorio se refiere sólo al acceso, a la forma de leer, no de escribir, no? aunq en cierto modo la escritura es secuencial pq pone uno detrás de otro.

gracias                                
eigon
----------------------------------------------
El arca de Noe fue construida por amateurs.
El Titanic por profesionales.

deadLock++

                                Para retornar datos de una función puedes hacer también a través de sus parámetros, para esto tienes dos caminos:

1. Utilizar punteros (compiladores C o C++).
2. Utilizar el pasaje de parámetros por referencia (compiladores C++).

Utilizando punteros:

void foo(int * pA);



void main(void)

{

  int a;

 

  foo(&a);



  printf("valor: %dn", a);

}



void foo(int * pA)

{

  *pA = 10;

}

De esta manera lo que pasas como argumento es una dirección de memoria.

Utilizando referencias:

void foo(int &a);



void main(void)

{

  int a;

 

  foo(a);



  printf("valor: %dn", a);

}



void foo(int &a)

{

  a = 10;

}


En este último método el código queda un poco mas limpio, sin embargo el compilador hace lo mismo que en el método 1, ya que finalmente lo que se pasa como argumento es una dirección de memoria.                                

Mars Attacks

                               
CitarTengo un par de dudas más q espero q se resuelvan para el montón  :D :

1) si tengo una función q quiero q devuelva dos valores (ó 3, ó 4...) como lo hago, pq si lo pongo así tanto en la definición como en la declaración, como q sólo se puede devolver uno, no?:

int funcion (int,int)

Muchas veces se suele usar el primer int como indicador de éxito o fallo en la función, y los parámetros que se pasan están entre los paréntesis de la función, bien por referencia o bien por valor, como muy bien te ha explicado deadLock.

Citar
2) la forma en q los datos se meten en un archivo es uno detrás de otro, no? sea en "modo texto" (al ver el archivo se ven bien los datos) o en "modo variable"(al ver el archivo se ven simbolos raros). quiero decir q lo de secuencial y aleatorio se refiere sólo al acceso, a la forma de leer, no de escribir, no? aunq en cierto modo la escritura es secuencial pq pone uno detrás de otro.

Tú mismo te lo has respondido, ¿no? Se escribe secuencialmente (al escribir en modo texto -asciis- o en modo binario -cualquier símbolo binario-) adelantando una posición después de escribir el dato. Pero puedes posicionarte en cualquier parte del fichero (con alguna función como fseek o similares) y seguir escribiendo a partir de ahí. En ficheros que sirven como fichero de datos de una base de datos, si cada registro tiene un número fijo de bytes (pongamos n bytes) y quieres escribir directamente en el quinto registro, harías un fseek a la posición 5*n del fichero y escribirías (o leerías).
No sé si me he explicado muy bien...                                

Zeigon

                                pues gracias a los 2. ya me ha quedado claro, pero esto me lleva a otra pregunta  :jaja: : q diferencia hay entre abrir un archivo en modo texto y en modo binario, creo haber leido q para abrir en binario habia q poner una 'b' donde se pone el modo de apertura:


txt = fopen("archivo.txt", "b+w"); //por ejemplo para abrir en binario y escritura, no?



pero para q sirve abrir archivos así??

regracias  :P                                
eigon
----------------------------------------------
El arca de Noe fue construida por amateurs.
El Titanic por profesionales.

Mars Attacks

                                Pues que en uno puedes visualizar y/o modificar los datos con cualquier programa procesador de textos (el notepad, por ejemplo) y con el otro, al abrirlo sólo verás marcianos.
Digamos que, si quieres que tu archivo pueda ser manejado "desde el exterior" del programa con que lo usas, es recomendable trabajar en modo texto (se abriría con a+t, creo). Si no, pues modo binario y a la marcha.
En realidad lo que marca la diferencia es cómo leas o cómo escribas. Es decir, si tú lees chars y en el archivo hay un 00010101 físico (por poner algo), tendrás en la variable de entrada el caracter "A" (o lo que sea). Si lees enteros, leerás un 21, y así sucesivamente. Pero entonces igual no te reconoce bien caracteres especiales de modo texto (tabulaciones, retornos de carro o cosas así). En fin, no estoy muy lúcido, si alguien puede explicarlo mejor que lo haga :)                                

Xtrai2

                                En modo binario se tratan los fines de linea de diferente manera creo...                                
a href='http://www.ayudac.com' target='_blank'>AyudaC

Repoker

                                Sí, es por eso que a veces al bajar un archivo de texto plano (ole mi ingles) con un cliente ftp en modo BINARIO te llega sin saltos de línea y con unos caracteres como cuadrados al final de las mismas :)                                

synchrnzr

                                Es lo que dice Xtrai2, en binario al escribir se completan los retornos de carro y saltos de línea y al leer se omiten. Por cierto, creo que la cadena de acceso tendría que ser "bw" o "wb" sin el símbolo '+'... aunque afortunadamente para ti el compilador omite los modificadores no reconocidos sin dar error ;)

sync                                






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.