Anuncios Google

Problema en c escritura de archivo de texto ayuda por favor

Bueno mi problema es el siguiente yo acabo de aprender lo de la lectura y escritura de archivos y tenia este programilla que hice que dependiendo de lo eligieras leia un archivo o otro el codigo era el siguiente:

Ubuntu 11.10 y uso el ide geany no creo que importe pero por si acaso

 

#include <stdio.h>
 
int main() {
	//Aqui se almacenara la variable del idioma
	int eleccion;
 
	//Usamos esta variable para leer el texto del idioma que elijamos
	FILE *idioma;
 
 
		printf("	Selecciona el idioma para usar");
		printf("\n1		English");
		printf("\n2		Español");
		printf("\nNumero: ");
		scanf("%i", &eleccion);
 
	//Almacenamos el idioma que quieres usar
 
 
	//Cargamos en la variable idioma el archivo de texto con el idioma correspondiente
	//La lista de cada numero con su idioma es:
	//1 Ingles
	if(eleccion == 1)
	{
		idioma = fopen("languages/english.txt", "r");
	}
	//2 Español
	if(eleccion == 2)
	{
		idioma = fopen("languages/spanish.txt", "r");
	}
	if(idioma == NULL)
	{
		printf("No se puede abrir el archivo");
	}
	while(feof(idioma)==0)
	{
	char texto=getc(idioma);
	printf("%c", texto);
	}
	if (fclose(idioma)!=0)
       printf( "Problemas al cerrar el fichero origen.txt\n" );
	return 0;
}

Bueno pues iba bien y funcionaba pero luego se me ocurrio que esto solo lo preguntara la primera vez que se ejecutara el programa y que guardara en un archivo el valor de eleccion para que no haga falta volver a hacer esto todo el rato bueno probe con esto pero al ejecutarlo me dice en el terminal lo siguiente :

Me pregunta la opcion normal y luego tras poner cualquiera me pone esto:

 

Segmentation fault

No se que me pasa si me pudieran ayudar se lo agradeceria mucho
#include <stdio.h>
 
int main() {
	//Aqui se almacenara la variable del idioma
	int eleccion;
 
	//Usamos esta variable para leer el texto del idioma que elijamos
	FILE *idioma;
 
	//Usamos este variable para leer/escribir el archivo de configuración
	FILE *guardar;
	guardar = fopen("configuration/idioma.txt", "rm");
 
 
	if(guardar==NULL)
	{
		printf("	Selecciona el idioma para usar");
		printf("\n1		English");
		printf("\n2		Español");
		printf("\nNumero: ");
		scanf("%i", &eleccion);
	}
 
	//Almacenamos el idioma que quieres usar
 
 
	//Cargamos en la variable idioma el archivo de texto con el idioma correspondiente
	//La lista de cada numero con su idioma es:
	//1 Ingles
	if(eleccion == 1)
	{
		putc(eleccion, guardar);
		idioma = fopen("languages/english.txt", "r");
	}
	//2 Español
	if(eleccion == 2)
	{
		putc(eleccion, guardar);
		idioma = fopen("languages/spanish.txt", "r");
	}
	if(idioma == NULL)
	{
		printf("No se puede abrir el archivo");
	}
	while(feof(idioma)==0)
	{
	char texto=getc(idioma);
	printf("%c", texto);
	}
	if (fclose(idioma)!=0)
       printf( "Problemas al cerrar el fichero \n" );
    if (fclose(guardar)!=0)
       printf( "Problemas al cerrar el fichero\n" );
 
	return 0;
}

 



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

Geany no tenía un debugger?

Si no tiene debugger, puedes usar nemiver, que es independiente de ningún IDE.

Bueno, en cualquier caso, intentaré adivinar el problema: ¿Qué pasa si no sonsigue abrir el fichero para lectura? idioma apuntaría a null y peta en cuanto usas la variable (en feof o getc). Lo más probable es que el archivo esté en otra ruta, o que tenga un nombre un poco diferente o algo así. En el if(idioma==null) pon un exit o un return. A veces no se llegan a ejecutar el printf porque peta. Si el programa se sale, sabes que era por eso.

Saludos.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de anxoganso

Ok pero que es el debugger??

Ok pero que es el debugger??


a otra cosa ya lo edite y el

a otra cosa ya lo edite y el programa me devuelve cero pero no escribe nada ni crea ningun fichero ni nada que hago mal ¿?


Imagen de joserc87

Perdona.

En cristiano, depurador. Es que tengo la manía de hablar en espanglish :P

Por si sigues perdido, un programa que ejecuta tu programa paso a paso comprobando que todo esté correcto, y si salta un error, te dice en qué linea esta (entre otras muchas cosas que hace).

Literalmente, para quitar los bugs (bichos) de tu programa.

Saludos


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de anxoganso

A ok yo lo uso pero no sabia

A ok yo lo uso pero no sabia k lo estuba usando antes de escribir el tema me decia que era la funcion putc con gdb pero ahora no me deci nada pero se sigue sin guardar nada en ningun fichero que hago mal¿?


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.