buenas!
Para hacer una clasificación por puntos en un juego, necesito leer el archivo de puntuaciones y buscar si el usuario aparece en dicho archivo. Si aparece, necesito escribir en el archivo la mayor puntuación que haya hecho. Si no aparece, pues lo coloco y punto.
He hecho un programilla que funciona bien si no comprouebo si está, pero
a la que intento usar strcmp() me da resultados erróneos, y no sé dónde la estoy cagando.
Pongo el programa:
Código C:
Ver original#include <stdio.h>
#include <string.h>
struct UsuariPuntuacio{
char nom[25], data[10];
int punts;
struct UsuariPuntuacio *seg;
};
int main()
{
struct UsuariPuntuacio *punt_primer, *punt_aux, punt, punt_actual;
int punts, n_resultats=1, i=0, jugador_no_exist=1;
char Jugador[25], data[25];
FILE *fitxer;
fitxer
=fopen("Puntuacions2.txt", "r+");
if(fitxer==NULL)
{
printf("Error llegint el fitxer."); }else{
punt_primer=&punt;
punt_aux=&punt;
gets(Jugador
); // Es convertirà en la variable "Jugador" gets(data
); // Es convertrà en la variable "data", que s'ha de crear i demanar a l'usuari scanf("%d", &punts
); // Es convertirà en la variable "punts"
fgets(punt.
nom, 25, fitxer
); fgets(punt.
data, 11, fitxer
); fscanf(fitxer
,"%d\n",&punt.
punts);
{
(*punt_aux
).
seg = (struct UsuariPuntuacio
*)malloc(sizeof(struct UsuariPuntuacio
)); punt_aux=(*punt_aux).seg;
fgets((*punt_aux
).
nom, 25, fitxer
); fgets((*punt_aux
).
data, 11, fitxer
); fscanf(fitxer
,"%d\n",&(*punt_aux
).
punts); n_resultats++;
}
punt_aux=punt_primer;
i=0;
while(i<n_resultats && jugador_no_exist!=0)
{
jugador_no_exist
=strcmp(Jugador
, punt_aux
->nom
);printf("Valor de jugador_no_exist: %d", jugador_no_exist
); i++;
printf("Llargada de l'usuari %d: %d\n", i
,strlen(punt_aux
->nom
)); punt_aux = (*punt_aux).seg;
if (jugador_no_exist
==0) printf("Jugador existeix"); }
}
El archivo "Puntuacions.txt" (de dónde saco las puntuaciones) tiene esta estructura:
Código:
Joan López
10/10/2007
10540
Pere Valls
15/10/2007
10230
Anna Garcia
05/10/2007
8500
El problema que tengo, como he dicho, es al usar strcmp() aquí:
Código C:
Ver originalwhile(i<n_resultats && jugador_no_exist!=0)
{
jugador_no_exist
=strcmp(Jugador
, punt_aux
->nom
);printf("Valor de jugador_no_exist: %d", jugador_no_exist
); i++;
printf("Llargada de l'usuari %d: %d\n", i
,strlen(punt_aux
->nom
)); punt_aux = (*punt_aux).seg;
if (jugador_no_exist
==0) printf("Jugador existeix");
Si al ejecutar el programa pongo los siguientes datos:
Código:
Anna Garcia
05/01/2010
500
(sólo me importaa la primera línea, el nombre) Este nombre está en el archivo, pero strcmp() me dice que no, que "Anna Garcia" del archivo es más largo (12 carácteres) que el "Anna Garcia" que he escrito yo (11 carácteres).
Puede ser que la función gets() no añada el carácter "\0" al final de la cadena??
Cómo puedo solucionarlo?
Muchísimas gracias :D
Nota: He probado de añadir este carácter con strcat() así:
strcat(Jugador, "\0"); pero tampoco funciona.
En cambio, si pongo
strcat(Jugador, "a\0"); (atención a la
a) añade la letra, pero no el carácter final...