4 Replies - 426 Views - Last Post: 10 July 2011 - 02:51 PM Rate Topic: -----

#1 pablognu  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 10-July 11

I have errors trying to save the characters into an array and compile.

Posted 10 July 2011 - 10:31 AM

Hi, i'm learning C, and i have to do an exercise, i have 2 questions:

First:

When i compile my code, i got this error:

principal.c: In function ‘obtienepalabra’:
principal.c:60: warning: assignment makes integer from pointer without a cast

Why i get this?

And Second, in this part of code

palabra = obtienepalabra()	;
printf("%s", palabra);



I call a function called obtienepalabra() and this return a word from a local dictionary, i save it into a variable called palabra type int, i need to make this...

palabra = "hola"

and covert into this:

palabra2 = [ "h", "o", "l", "a" ].

I need to get this array to continue with my program, but i'm stuck on it.

Thanks for the help.

Here is all code:

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

void creardiccionario() { 
	/* Funcion encargada de crear un diccionario local de palabras con 20 palabras de ejemplo" */
	/* Estructura de fichero */
	FILE *creadorfichero; 
	/* Array constante con las palabras a guardar */
	char const *diccejemplo[] = {"hola", "mundo", "señor", "camisa", "chaleco", "muerte", "casa", "instinto", "explicar", "romper", "comprar", "barrera", "animales", "perro", "gato", "asunto", "fecha", "emisor", "receptor", "carta"};
	creadorfichero = fopen("diccionariolocal.txt", "w"); /* Abrimos un fichero en modo "crear" */
	int i; /* Variable para el bucle */
	for (i=0; i<20; i++) { /* Bucle con el cual escribimos las palabras dentro del fichero */
		fprintf(creadorfichero,"%s\n",diccejemplo[i]); 
	};  
	fclose(creadorfichero); /*Cerramos el fichero */
	
}

int obtienepalabra() {
	/* Funcion encargada de obtener la palabra para poder jugar, desde el fichero de texto */
	FILE *dicclocal;
	char bufferpalabras[10000];
	int cantidad = 0;
	int cantidadvalida = 0;
	int cantidadaverigua;
	int salida;
	int aleatorio;
	int continuar = 0;
	
	dicclocal= fopen("diccionariolocal.txt", "r");
	while ((fscanf(dicclocal,"%s",bufferpalabras)) != EOF) {
		cantidad++;
		if ((strlen(bufferpalabras) <= 8) & (strlen(bufferpalabras) >= 4)) {
			cantidadvalida++;
		}
	}
	printf("Cantidad de Palabras en el fichero: %d\n", cantidad);
	printf("Cantidad de Palabras utilizables: %d\n", cantidadvalida);
	fclose(dicclocal); 

	if (cantidadvalida == 0) {
		printf("----------------------------------------------------------------------------------------------------------\n");
		printf("|     Parece que el fichero de Almacenamiento de palabras no contiene una palabra valida para jugar      |\n");
		printf("|                                  crearemos uno automaticamente.                                        |\n");
		printf("|   El fichero se llama diccionariolocal.txt, ubicado en la misma carpeta que el ejecutable del juego.   |\n");
		printf("|  Podra añadir sus propias palabras, hasta un maximo de 10000 palabras, pero solo se tendran en cuenta  |\n");
		printf("|                aquellas palabras que sean de 4 a 8 letras, disfrute del video juego.                   |\n");
		printf("----------------------------------------------------------------------------------------------------------\n");
		creardiccionario();
	}
	
	while (continuar == 0) { 
		aleatorio = rand() % cantidad;
		cantidadaverigua = 0;
		dicclocal= fopen("diccionariolocal.txt", "r");
		while ((fscanf(dicclocal,"%s",bufferpalabras)) != EOF) {
			if ((cantidadaverigua + 1) == aleatorio) {
				if ((strlen(bufferpalabras) <= 8) & (strlen(bufferpalabras) >= 4)) {
					salida = bufferpalabras;
					return(salida);
					continuar = 1;
				}
			}
			cantidadaverigua++;
		}
		fclose(dicclocal); 
	}
}

int main() {

	int cantidad; /* Variable local para bucles*/
	char bufferpalabras[10000]; /* Buffer para analizar palabras */
	char caracteresdepalabras[8];
	char opciones; /* Variable para detectar opciones del menu principal */
	int palabra; /* Variable para almacenar la palabra en juego */
	FILE *palabraslocales; /* Estructura de fichero para detectar la existencia */

	system("clear"); /* Limpiar pantalla */

	printf("***************************************************\n"); /* Presentacion del programa */
	printf("****	 Bienvenido al Juego del Ahorcado      ****\n");
	printf("***************************************************\n");
	opciones = 0; /* Inicializamos la variable a "0" */
	while (opciones == 0) { /* El bucle se ejecuta hasta recibir la opcion esperada, es el menu principal */
		printf("\n\nPor favor seleccione una opcion:\n\n"); /* Muestra las opciones del menu */
		printf("(1) Un jugador\n");
		printf("(2) Dos jugadores\n");
		printf("(3) Salir\n");
		scanf("%s", &opciones); /* Captura la entrada del usuario y lo guarda en la variable opciones */
		switch(opciones){ /* Segun el valor de opciones ejecuta distintas acciones */
		case '1': /* Si opciones vale "1" */
			printf("Ha seleccionado un jugador:\n");
			/* Si al abrir el fichero, este no existe, muestra un mensaje en pantalla y llama a la funcion de creardiccionario */
			if ((palabraslocales = fopen("diccionariolocal.txt", "r")) == NULL) {
				printf("----------------------------------------------------------------------------------------------------------\n");
				printf("|      Parece que el fichero de Almacenamiento de palabras no existe, crearemos uno automaticamente.     |\n");
				printf("|   El fichero se llama diccionariolocal.txt, ubicado en la misma carpeta que el ejecutable del juego.   |\n");
				printf("|  Podra añadir sus propias palabras, hasta un maximo de 10000 palabras, pero solo se tendran en cuenta  |\n");
				printf("|                aquellas palabras que sean de 4 a 8 letras, disfrute del video juego.                   |\n");
				printf("----------------------------------------------------------------------------------------------------------\n");
				creardiccionario();
			}
			/* Despues de mirar la condicion anterior, si al abrir el fichero no devuelve un error, analiza la cantidad
			 * de datos dentro de este, si no existen, muestra un mensaje en pantalla y llama a la funcion creardiccionario */
			if ((palabraslocales = fopen("diccionariolocal.txt", "r")) != NULL) {
				cantidad = 0;
				while ((fscanf(palabraslocales,"%s",bufferpalabras)) != EOF) {
					cantidad++;
				}
				if (cantidad == 0) {
					printf("----------------------------------------------------------------------------------------------------------\n");
					printf("|      Parece que el fichero de Almacenamiento de palabras esta vacio, crearemos uno automaticamente.    |\n");
					printf("|   El fichero se llama diccionariolocal.txt, ubicado en la misma carpeta que el ejecutable del juego.   |\n");
					printf("|  Podra añadir sus propias palabras, hasta un maximo de 10000 palabras, pero solo se tendran en cuenta  |\n");
					printf("|                aquellas palabras que sean de 4 a 8 letras, disfrute del video juego.                   |\n");
					printf("----------------------------------------------------------------------------------------------------------\n");
					fclose(palabraslocales); 
					creardiccionario();
				}
				/* Una vez creado el diccionario, llama a la funcion obtienepalabra */
				palabra = obtienepalabra();
				printf("%s\n", palabra);
				break;
			} else {
				/* Si la condicion de que analizar el fichero devuelve que este no esta vacio, llama a obtiene palabra */
				palabra = obtienepalabra();
				printf("%s", palabra);	
			}
		case '2': /* Si opciones vale "2" */
			printf("Ha seleccionado dos jugadores:\n");
			break;
		case '3': /* Si opciones vale "3", limpia la pantalla y muestra mensaje de Despedida */
			system("clear"); 
			printf("*********************************************************\n");
			printf("****	 Gracias por usar el Juego del Ahorcado      ****\n");
			printf("*********************************************************\n");
			return 0;
			break;
		default:  /* Si opciones no coincide con ningun caso, muestra error y vuelve a enseñar el menu, reiniciando la variable opciones a 0*/
			printf("La opcion seleccionada no es correcta\n");
			opciones = 0;
		} 
	}
	
}


Is This A Good Question/Topic? 0
  • +

Replies To: I have errors trying to save the characters into an array and compile.

#2 NickDMax  Icon User is offline

  • Can grep dead trees!
  • member icon

Reputation: 2247
  • View blog
  • Posts: 9,237
  • Joined: 18-February 07

Re: I have errors trying to save the characters into an array and compile.

Posted 10 July 2011 - 10:37 AM

note: strngs are char arrays with a trailing '\0' char.

So this:
char palabra[] = "hola"

is the same as:
char palabra[] = { 'h','o','l','a', '\0'};
Was This Post Helpful? 0
  • +
  • -

#3 pablognu  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 10-July 11

Re: I have errors trying to save the characters into an array and compile.

Posted 10 July 2011 - 11:16 AM

View PostNickDMax, on 10 July 2011 - 10:37 AM, said:

note: strngs are char arrays with a trailing '\0' char.

So this:
char palabra[] = "hola"

is the same as:
char palabra[] = { 'h','o','l','a', '\0'};


First, thanks for the answer.

palabra is a variable type int, not char, if i change it to char i got this error.

"Segmentation fault".

If i change the line printf("%s", palabra) to %d i got a number, i don't know why...

What do you see in my code?
Was This Post Helpful? 0
  • +
  • -

#4 Karel-Lodewijk  Icon User is offline

  • D.I.C Addict
  • member icon

Reputation: 449
  • View blog
  • Posts: 849
  • Joined: 17-March 11

Re: I have errors trying to save the characters into an array and compile.

Posted 10 July 2011 - 11:23 AM

on line 60 you say

salida = bufferpalabras;
return(salida);



Salida is an int, bufferpalabras is a character array, which is basically a pointer to the first character in an array of characters (char *). Now you assign bufferpalabras, the address to a character to an int and return it. Is this really what you want ?

This post has been edited by Karel-Lodewijk: 10 July 2011 - 11:24 AM

Was This Post Helpful? 0
  • +
  • -

#5 pablognu  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 10-July 11

Re: I have errors trying to save the characters into an array and compile.

Posted 10 July 2011 - 02:51 PM

Hi Karel-Lodewijk...

Well i really need to get the character array, but, if i try to return "bufferpalabras", i got an error and i can't continue the program with out data, so, making some test i discovered that if i put bufferpalabras into a int and i return that int, the code works.

What i'm doing wrong?

Please if you can explain to me...

Thanks!

This post has been edited by pablognu: 10 July 2011 - 02:51 PM

Was This Post Helpful? 0
  • +
  • -

Page 1 of 1