Fichero en C

EtherMaN

Hola , estoy haciendo un trabajo para la universidad y tengo la siguiente duda a ver si vosotros sabeis como realizarlo.

El problema aparece cuando creo un fichero y quiero introducir unos datos pero dentro de el, me gustaría obtener una forma ordenada para que cuando se habra el txt se vea correctamente. Por ello lo que busco es crear dentro del fichero \n . No se si me explico bien.

Ejemplo : (dentro del fichero.txt, el fichero es modo t)


Nombre: tal
alaalal : lalal
laalalal: sks

Descripcion: aslakklklsaalks

cabron

Si la memoria no me falla, fputs() escribe una cadena seguida de un salto de línea.

EtherMaN

con f puts me pone cada cosa una detras de la otra por ejemplo:

frase1 frase2

cabron

Prueba con fprintf() , y pasa la cadena con un \n al final en plan "loquesea\n"

Y0K3S3

Estoy de acuerdo con #4

EtherMaN

en el txt me sale un cuadradito donde deberia hacer el salto de linea

r2d2rigo

Estas en Unix/Linux? En Windows el retorno de carro es \n, en otro SOs \r\n. Prueba asi.

EtherMaN

Estoy en windows, y por ejemplo he usado el \t y si ke me lo hace pero con el \n me sale el cuadrado :S

edit: acabo de probar \r\n y si me funciona asi :S

GRACIAS

cabron

Vaya, pues ahora ya sí que me he quedado sin ideas :?

edit: bueno veo que ya te han dado la solución mientras escribía.

De todas formas #7, según el estándar de C, \n debe transformarse de forma transparente a la combinación que indique un salto de línea en el entorno en el que se está ejecutando el programa, así que en teoría, al poner \n, se debería escribir el salto de línea y el retorno de carro de forma automática al ejecutar el programa en un SO donde el salto de línea se haga así.

Vamos, no digo que no tengas razón, solo que si es como dices en Linux, no sería 100% correcto según el estándar ANSI C.

JuAn4k4

Sera que lo abre con el bloc de notas y a veces pasa. A mi al abrir un header *.h con el bloc de notas me transforma los retornos de carro a cuadraditos, muchas veces.

EtherMaN

mmmm otra duda, cuando pongo por ejemplo :

char cosa[4]="abc";

fprintf(file,"palabra: %s", cosa);

me da error al ejecutar el programa. fprintf no funciona parecido al printf ??

r2d2rigo

cabron, el caso es que lo he dicho un poco a lo burro (nunca me acuerdo si \n es de windows y \r\n de unix o al reves), pero recuerdo que al principio me pasaba lo mismo. Luego ya descubri el placer de las iostream, que con la constante endl te lo hacen automatico, pero vamos, parece ser que no es tan transparente como deberia.

EtherMaN: no estas finalizando la cadena en '\0', normal que te pete al usarlo :P

char cosa[4] = "abc";
cosa[3] = '\0';
EtherMaN

sigue dando error, no se porque :s, no me deja introducir strings en los ficheros de texto. En cambio números decimales si.

Merkury

#11 Te pasa porque eres un melon XD

Prueba a definir como:

string cosa[4]='abc';

y poner fprintf(file, "palabra: %c", cosa);

y si no quieres cambiar la definicion pon:

char cosa[4]='abc';

fprintf(file, "palabra: %c", cosa);

Y para todo lo demas Help si estas programando cn el BorlandC que es muy completita.

Saludos

iKi

Ando un poco oxidada pero ... en C podías hacer esa asignación ? Yo juraría que no ... Tienes que hacerlo o con un puntero a char y un strcpy o si vas a usar un array de char, posición a posición

Usease

char *loquesea;
strcpy(loquesea,"mi string");

O bien

char loquesea[4];

loquesa[0]='a';
loquesa[1]='b';
loquesa[2]='c';
loquesa[3]='\0';

Si me he equivocado lo siento, pero me suena a mi que en C era así

EtherMaN

#14
mmm lo de string cosa[4]... string no es una funcion de C o al menos no me lo reconoce, igual es por alguna libreria pero utilizo string.h , stdio.h y stdlib.

Y luego cuando dices %c , a mi me han dicho siempre que eso imprime el primer caracter y no todo el array. Seguiré investigando aver.

T

fprintf(fichero,"%d \n",&numero1);
fprintf(fichero,"Este es el mensaje que me apetece ... \n");

Merkury

Prueba a hacer estos includes:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

Saludos

EtherMaN

#17 El problema me viene al introducir algo que tengo almacenador en un vector. Si uso las " " , si que funciona.

Un saludo

JuAn4k4
#include <stdio.h>

int main(){
 char cosa[4];
 FILE *fd;

 strcpy(cosa,"abc"); /* strcpy ya pone solo el '\0' */

fd = fopen( "fichero.txt", "w");

 fprintf(fd, cosa);
 fprintf(fd,"\n");
 fprintf(fd," vs %s\n", cosa );
 return 1;
}

He probado eso y en Unix funciona.

PirLo_21

Lo de #20 es correcto

Usuarios habituales