ejercicio 122 de C: pido ayuda -error en plena ejecución-

Iniciado por Kr3c13nt3, 7 Marzo 2008, 19:22 PM

0 Miembros y 1 Visitante están viendo este tema.

Kr3c13nt3

Hola:

Como verán soy n00b en este foro ;D y ayer me interesé en coger uno de los ejercicios de C y me gustó uno en particular que maneja ficheros:

Enunciado:
  Escribir un programa que solicite palabras y las agrege a un fichero llamado    c:\diccionario de forma que luego se puedan consultar las palabras una a  una.

Bueno ....para ver si el programa efectivamente guardaba las palabras, modifique el ejercicio y en vez de consultar, quería mostrar las palabras guardadas. El problema, que usando Dev-c++(S.O. Windows XP), no arroja errores o advertencias, pero a la hora de ejecutar el programa, arroja un error  algo así como..."este programa ha cometido un error y debe cerrarse".  Supongo que es un error con punteros.

#include <stdio.h>
#include <stdlib.h>
#define max 10

int main(){
    int i;
    char ifilename[] = "diccionario.txt";
    char palabra[20], idChar;
   
    FILE  *ifp; //apuntador a archivo
    ifp = fopen(ifilename, "a+");// abre el archivo para add info.
                               //Si no existia se crea uno nuevo.
   
   
     if(ifp==NULL){
                   printf("Error al abrir fichero diccionario.txt");
                   exit(0);
                     } 
 
  for(i=0;i<max;i++){                                           
    printf("Ingrese una palabra a continuacion:");
    scanf("%s", &palabra);
    fprintf(ifp, "%s\n",  palabra);
                 }                 
  fclose(ifp);
   
       ifp = fopen(ifilename, "r");// abre el archivo para add info.
                               //Si no existia se crea uno nuevo.
   
   
     if(ifp==NULL){
                   printf("Error al abrir fichero diccionario.txt");
                   exit(0);
                     }   
     while(fscanf(ifp, "%s",  &idChar) != EOF)//mientras no llegue al fin
           {
                          printf("%s", idChar);     //de archivo se escriben
                                 }                   //por pantalla los datos.
                                                     
   
    fclose(ifp); //cierra el archivo

   return 0;
}


Si alguien se la puede con el ejercicio, por favor, responder. :rolleyes:

Flakito81

Pues básicamente q idChar no es un array, estas intentando meter una cadena de caracteres en una variable que solo puede almacenar un caracter. Como observación te digo que cuando lees con scanf una variable del tipo string (array de caracteres (char *vble/char vble[20)) no tienes que ponerle el &, ya que el propio nombre de la variable es un puntero al primer elemento.

Suerte!

Kr3c13nt3

gracias por la observación flakito81, pero se sigue cayendo.... :¬¬

#include <stdio.h>
#include <stdlib.h>
#define max 10

int main(){
    int i;
    char ifilename[] = "diccionario.txt";
    char palabra[20];
    char idChar;
   
    FILE  *ifp; //apuntador a archivo
    ifp = fopen(ifilename, "a+");// abre el archivo para add info.
                               //Si no existia se crea uno nuevo.
   
   
     if(ifp==NULL){
                   printf("Error al abrir fichero diccionario.txt");
                   exit(0);
                     } 
 
  for(i=0;i<max;i++){                                           
    printf("Ingrese una palabra a continuacion:");
    scanf("%s", &palabra);
    fprintf(ifp, "%s\n",  palabra);
                 }                 
  fclose(ifp);
   
       ifp = fopen(ifilename, "r");// abre el archivo para add info.
                               //Si no existia se crea uno nuevo.
   
   
     if(ifp==NULL){
                   printf("Error al abrir fichero diccionario.txt");
                   exit(0);
                     }   
     while(fscanf(ifp, "%s",  idChar) != EOF)//mientras no llegue al fin
           {
                          printf("%s", idChar);     //de archivo se escriben
                                 }                   //por pantalla los datos.
                                                     
   
    fclose(ifp); //cierra el archivo

   return 0;
}

En una de esas..encuentre la respuesta...

GroK

Sigues teniendo varios fallos del estilo de los que te dijo Flakito81, mira te pongo aqui el codigo corregido y con los errores marcados:

#include <stdio.h>
#include <stdlib.h>
#define max 10

int main (void)
{

   int i;
   char ifilename[] = "diccionario.txt";
   char palabra[20];
   char idChar;
   
   FILE *ifp;                                  // apuntador a archivo
   ifp = fopen (ifilename, "a+");   // abre el archivo para add info.
                                                    //Si no existia se crea uno nuevo.
   
   if (ifp == NULL)
   {
      printf ("Error al abrir fichero diccionario.txt\n");
      exit (1);
   } 
 
   for (i = 0; i < max; i++)
   {                                           
      printf ("Ingrese una palabra a continuacion:");
      scanf ("%s", palabra);   // FALLO: sobra el ampersand (&)
      fprintf (ifp, "%s\n", palabra);
   }                 
   fclose (ifp);

   ifp = fopen(ifilename, "r");
   if (ifp == NULL)
   {
      printf ("Error al abrir fichero diccionario.txt\n");
      exit (1);
   }
   while (fscanf (ifp, "%s", palabra) != EOF)  // FALLO: no va "idChar" sino "palabra", no puedes meter
   {                                                                // un array de caracteres en un char
      printf("%s\n", palabra); // FALLO: Idem
   }
   fclose(ifp); // Cierra el archivo
   return 0;
}


Saludos
"I put on my Hendrix album and my son said 'Dad, who's that?' and i said 'Well son, that's God' "- Robert Plant