BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

strcmp en C

BocaDePez

Buenas, tengo que hacer un simple ejercicio para mi centro de estudios en que la función sea hacer un programa que ejecutándolo en la carpeta deseada, te escriba en un txt un listado de todo el contenido de esa carpeta. El problema que tengo es que me lo lista todo incluyendo el ".", ".." y también dos strings "temp.txt" y "listado.exe" que son parte del programa. Estoy intentando hacer que me borre esas 4 líneas pero no lo acabo de conseguir, mi objetivo era el crear un FILE "temp.txt" en donde me lo escribe todo, incluyendo esas líneas que no quiero, entonces luego voy leyendo línea por línea del FILE "temp.txt" y lo voy asignado a una string y luego lo comparo con unas strings que he declarado asignándoles los carácteres que no deseo que salgan.

Bueno me imagino que es difícil de imaginar así que mejor pongo el código...

int main () {

FILE *puntero,*punterodefinitivo; //puntero será el "temp.txt" y el definitivo sería el resultado.
DIR *directorio;
struct dirent *contenido;
char string[120];
char s1[]=".."; // Empiezo declarando las strings con los carácteres que no quiero que salgan"
char s2[]=".";
char s3[]="listado.exe"; /* es el nombre del ejecutable cuando lo compilo, como lo ejecuto en la misma carpeta también me lo copia en el listado */
char s4[]="temp.txt"; // El archivo "temporal"

contenido=readdir(directorio);
while(contenido!=NULL) {
fprintf(puntero,"%s \n",contenido -> d_name);

contenido=readdir(directorio);
}
closedir(directorio);
fclose(puntero);
puntero=fopen("temp.txt","r");
punterodefinitivo=fopen("listado.txt","w");
while (!feof(puntero)){
fgets(string,120,puntero);
if ((strcmp (string,s1) != 0) && (strcmp (string,s2) != 0) && (strcmp (string,s3) != 0) && (strcmp (string,s4) != 0) ) {
fprintf(punterodefinitivo,"\n%s",string); // ***
}

}

}

*** No sé si he expresado bien tanto el if como el strcmp, había pensado en comprar "string" con s1,s2,s3 y s4 y si no devuelve 0 ( 0 creo que era cuando la comparación es igual ), pues que escriba en el punterodefinitivo, pero no me funciona, me escribe todo de nuevo.

Y ese es mi tocho de código, soy novato así que me imagino que lo que intento hacer se puede resumir en muchas líneas, así que también me gustaría recibir consejos.

Gracias!!

BocaDePez

Soy el mismo, es que el foro no me dejaba poner el código, me daba un error de noisy... he visto que eran las librerias, igualmente os digo cuales he puesto... stdio.h,stdlib.h,math.h,string.h,,sys/types.h,,sys/stat.h,,fcntl.h,unistd.h y dirent.h. Algunas no son necesarias pero siempre pongo estas como costumbre.

Gracias!!

🗨️ 2
BocaDePez

Aquí tienes una posible solución...

Imagen original en http://img244.imageshack.us/img244/3537/listado.png

Saludos.

🗨️ 1
BocaDePez

Buenas,

Me va perfecto el programita, muchas gracias por la ayuda!

Saludos,