• Martes 21 de Mayo de 2024, 05:04

Autor Tema:  Problema Con Los Strings  (Leído 1499 veces)

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Problema Con Los Strings
« en: Domingo 21 de Diciembre de 2003, 18:36 »
0
hola, tengo una parte de un codigo que lo que hace es tomar un numero de jugadores ( para una partida ) y luego va pidiendo sus nombres... He pensado en hacerlo de esta forma:

Código: Text
  1.  
  2.  
  3. char pers[n];
  4. int i;
  5. char nombre[10];
  6.  
  7. printf("¿ Para cuantos jugadores es la partida ?: ");
  8. scanf("%ld",&jug);
  9.  
  10. for(i=1;i<=jug;i++)
  11. {
  12. clrscr();
  13. printf("Introduce el nombre del jugador Nº%d: ",i);
  14. gets(nombre);
  15. pers[i]=nombre;
  16.  
  17.  
  18.  

pero el borlandc me dice que no se puede convertir 'char *' en 'char' o algo así.

El objetivo de este codigo es poder usar pers
  • donde X es el numero de cada jugador con su respectivo nombre. De forma que yo podria decir...
Código: Text
  1.  
  2.  
  3. for(j=1;j<=jug;j++)
  4. {
  5. printf("\n\n %s: Introduce el numero ( sin pasarse ): ",pers[j]);
  6. scanf("%ld",&num);
  7. }
  8.  
  9.  

de esta forma con el %s lo que saldria ahí es el nombre de cada jugador ( en teoria no ? )


Si alguien me puede ayudar se lo agradeceria, muchas gracias :)

plaf

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
Re: Problema Con Los Strings
« Respuesta #1 en: Lunes 22 de Diciembre de 2003, 00:34 »
0
lo q pasa es q char pers[n]; es un string (si es q "n" esta #definido, xq no se pueden declarar arreglos de portes variables), y lo q tu quieres es un arreglo de strings, o sea algo como char pers[n][10];
lo otro es q no puedes llegar e igualar un string a otro, hay q hacerlo caracter a caracter o con una funcion como strcpy(); pero eso ni siquiera es necesario xq puedes simplemente en vez de hacer gets(nombre); hacer gets(pers);
con esos 2 cambios deberia funcionar

pd: %ld es para long ints, cuantos jugadores quieres???? :blink: (aunque eso da lo mismo)

dreadlock

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Problema Con Los Strings
« Respuesta #2 en: Lunes 22 de Diciembre de 2003, 00:38 »
0
hola:

Primero espero que la respuesta se posteee correctamente, esque tengo algunos problemas con mi IE.

Pero en fin pues tu idea es buena y, si eso me a pasado e aqui 8una solucion viable,
primero te recomiendo que al pedir la candidad de jugadores ocupes una variable entera en lugar de la entera larga que ocupas, por que si es un juego asi ocupas menos memoria. Que siempre es bueno tom ar en cuenta.


Ahora esta parte es irrealizable

pers=nombre;

por que nombre lo declaraste comu un arreglo de 10 caracteres

ahora en tu gets(nombre)

-->al ejecutar el programa te diria algu asi
;******************
Introduce el nombre del jugador 1:
--> si yo tecleo por ejemplo:
DEMONIO AZUL
-->notamos que esta cadena contiene 12 caracteres
-->por que en la variable nombre solo se guardarian los caracteres:
-->DEMONIO AZ
-->los caracteres UZ no se guardarian ¿Me explico?

esta parte del codigo esta bien pero en la parte que sigue, la de igualar las cadenas nombre con jugador, es irrealizable si entendiste la parte de arriba sabras por que es irrealizable, si no pues espero esto te ayude:

declaras:

char pers[n];


porsteriormente pides el numero de jugadores

si pulsas en la ejecucion del programa 7 pues pide 7 nombres es logico jejejeje

se guarda en jug.

Aqui algo que no entiendo, me imagino que la n de pers, la difiniste
3 define n 10

entonces pers almacena 10 caracteres como la otra variable nombre

pero cuando haces esto

for(i=1;i<=jug;i++)
{
clrscr();
printf("Introduce el nombre del jugador Nº%d: ",i);
gets(nombre);
pers=nombre;
}

si lo piensas bien pers en la primera iteracion vale 1, despues 2, luego 3, etc hasta igualar jug.

ahora si lo analizamos como hace un instante tendiamos que pers, simpre almacenaria un caracter, como es un arreglo de n elementos.

primero almacenaria un valor, y siempre seria el primer carac6ter de la cadena nombre por lo que si nombre fuera "jugador 1"
pers[1] seria igual a "j". eso si funcionara mi teoria :D

bueno pero esa es la idea. por que esta igualdad
pers=nombre;

es invalida no puedes igualar cadenas como si fuecen enteros o flotantes.
debes utilizar la funcion strcpy, o' strcopy no recuerdo bien como es, esta funcion esta incluida en string.h

strcpy(cadena1,cadena2)
donde cadena 1 es la cadena final
y cadena 2 cadena origen
por que el codigo en todo caso seria
strcpy(pers,nombre);

pero si te das cuenta se rescribiria n veces en pers, lo que guardaranb en una itreracion seria sustuido por la siguiente.

Veras esto es lo que ami seme ocurre:

Código: Text
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8. #include &#60;stdio.h&#62;
  9. #include &#60;conio.h&#62;
  10. #include &#60;math.h&#62;
  11. #include &#60;string.h&#62;
  12. main(){
  13. int n,i,numero;
  14. char *nicks[10];//se declaran 10 apuntadores a cadena
  15. char *jug;
  16. clrscr();
  17. printf(&#34;Cuantos jugadores: &#34;);
  18. scanf(&#34;%d&#34;,&n);
  19. printf(&#34;&#092;n %d jugadores&#34;,n);
  20. i=1;
  21.  
  22. while(i&#60;=n){
  23. printf(&#34;&#092;nDame el nombre del jugador %d : &#34;,i);
  24. fflush(stdin);//se vacia el bufer de memoria
  25. gets(nicks[i]);
  26. i++;}
  27.  
  28. i=1;
  29. while(i&#60;=n){
  30. printf(&#34;&#092;nDame un numero %s: &#34;,nicks[i]);
  31. scanf(&#34;%d&#34;,numero);
  32. i++;}
  33.  
  34. }
  35.  
  36.  
  37.  
  38.  
  39.  

ESpero que sirva bien, aca n st isio
UN intento de explicar lo inezplicable:D

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Problema Con Los Strings
« Respuesta #3 en: Lunes 22 de Diciembre de 2003, 14:31 »
0
mas o menos he entendido porqué no funciona mi codigo, voy a intentar hacerlo de otra manera. Gracias.


dreadlock tu codigo no funciona bien, si pongo 2 jugadores y inserto los nombres ( Fran , Sergio ) a la hora de pedir el numero pone.

Dame un numero (null):
y luego....
Dame un numero (sergio):

fin del programa.


algo falla, pero gracias por la explicacion :)

dreadlock

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: Problema Con Los Strings
« Respuesta #4 en: Martes 23 de Diciembre de 2003, 00:00 »
0
si, tienes razon lo ciento, esque poco despues de escriboir el codigo mi maquina se colapso ;) , da la letra "e" y me habria mi pc, daba "q" y me abria buscar, no lo pude probar bien, pero lo bueno fue que de algo sirvio la explicacion, aveces resulto ser enredoso  :blink:
UN intento de explicar lo inezplicable:D

© Jonathan ©

  • Moderador
  • ******
  • Mensajes: 1671
  • Nacionalidad: ar
    • Ver Perfil
    • http://www.einstec.com.ar
Re: Problema Con Los Strings
« Respuesta #5 en: Martes 23 de Diciembre de 2003, 01:43 »
0
Hola, estaba pensando y se me ocurria que para almacenar los nombres de los jugadores o la cantidad de los mismos podria almacenar memoria dinamicamente, bueno, es tan solo una idea ya que de tanto leer me he perdido bastante. Saludos y Feliz navidad para todos!!  :hola:
EINSTEC Tecnología «La única fuente del conocimiento es la experiencia.»

«Lo importante es no dejar de hacerse preguntas.»

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Problema Con Los Strings
« Respuesta #6 en: Martes 23 de Diciembre de 2003, 14:21 »
0
a k te refieres ?  :comp: