/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

problema con un programa agenda :)

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
spartan117



Registrado: 26 Oct 2005
Mensajes: 38
Ubicación: monterrey

MensajePublicado: 25/10/2007 6:24 pm
Título: problema con un programa agenda :)

Bueno... hace muuuucho que no enro aqui, y estaba repasando C y me propuse hacer una agenda nomas que me da errores :S y queri a que me ayudaran Smile esta sobre GNU/Linux
y me da error en los scanf :S el ide que uso es eclipse con plugin de C/C++
me acabo de dar cuenta del error de feof xD pero ahora si me sale algo pero despues de poner algo sale core dumped Sad

el programa es para grabar los datos a un fichero y otros los leera pero no funciona Sad

Código:

#include <stdio.h>

struct dias {
   char lunes[50];
   char martes[50];
   char miercoles[50];
   char jueves[50];
   char viernes[50];
};

struct dias materias;   
   
int main()
{
   FILE *agendaw;
   char respuestadia[20];
   int horas;
   
   agendaw=fopen("agendaw.txt", "a");
   
   if ( agendaw == NULL) {
      printf( "Problemas con los ficheros.\n" );
        }
   while ( feof(agendaw) == 0) {
      printf("Que dia desea cambiar?(usa minusculas)");
      fflush( stdout );
      scanf( "%s" , &respuestadia);
      
   if (respuestadia == "lunes"){
      printf("\nvamos a cambiar el horario del %s", respuestadia);
      for (horas = 0 ; horas <= 7 ; horas++) {
         printf("\nQue clase toca a %i hora?", horas);
         fflush( stdout );
         scanf("%s " , &materias.lunes);
         fwrite(&materias.lunes, sizeof(struct dias), 1, agendaw);
      }
   }
   if ( respuestadia == "martes") {
      printf("\nvamos a cambiar el horario del %s", respuestadia);
      for (horas = 0 ; horas <= 7 ; horas++) {
         printf("\nQue clase toca a %i hora?", horas);
         fflush( stdout );
         scanf("%s " , &materias.martes);
         fwrite(&materias.martes, sizeof(struct dias), 1, agendaw);
      }
   }
   if( respuestadia == "miercoles") {   
      printf("\nvamos a cambiar el horario del %s", respuestadia);
      for (horas = 0 ; horas <= 7 ; horas++) {
         printf("\nQue clase toca a %i hora?", horas);
         fflush( stdout );
         scanf("%s " , &materias.miercoles);
         fwrite(&materias.miercoles, sizeof(struct dias), 1, agendaw);
      }
   }
   if( respuestadia == "jueves") {
      printf("\nvamos a cambiar el horario del %s", respuestadia);
      for (horas = 0 ; horas <= 7 ; horas++) {
         printf("\nQue clase toca a %i hora?", horas);
         fflush( stdout );
         scanf("%s " , &materias.jueves);
         fwrite(&materias.jueves, sizeof(struct dias), 1, agendaw);
      }
   }
   if( respuestadia == "viernes" ) {
      printf("\nvamos a cambiar el horario del %s", respuestadia);
      for (horas = 0 ; horas <= 7 ; horas++) {
         printf("\nQue clase toca a %i hora?", horas);
         fflush( stdout );
         scanf("%s " , &materias.viernes);
         fwrite(&materias.viernes, sizeof(struct dias), 1, agendaw);
      }
   }
   if (fclose(agendaw) != 0) {
      printf("\nNo se ha podido cerrar el fichero :(\n");
   }
   else {
      printf("\nse han podido guardar los datos al fichero :)\n\n");
      }
   }
return 0;
}


podrian ayudarme? Smile

gracias de antemano
Volver arriba
mamntc02



Registrado: 30 Abr 2007
Mensajes: 238

MensajePublicado: 26/10/2007 3:55 am
Título:

Hola,

Tienes un par de cosillas mal:
  • Cuando se usa scanf se debe pasar la dirección de memoria de la variable q vas a usar para almacenar el valor, pero como estás usando un array (q ya es una dirección de memoria) no te hace falta poner (de hecho, no debes poner) el operador de dirección &. Por tanto los scanf q leen un string deben estar:
Código:
scanf( "%s" , respuestadia);
Es decir sin el &. Igualmente yo no usaría scanf para leer strings, mejor usa gets().
  • Para comparar arrays no puedes usar el operador '==' por no estar sobrecargado. Debes usar funciones como strcmp(). Por tanto para comparar el "lunes" haz:
  • Código:
    if(!strcmp(respuestadia,"jueves")){...}

    Por último, en lugar de pedir q te entren los datos en minúscula, puedes hacer uso de toupper() ó tolower() para canviar entre mayúsculas y minúsculas.... Mas q nada, q queda más profesional Wink

    Saludos.
    Volver arriba
    spartan117



    Registrado: 26 Oct 2005
    Mensajes: 38
    Ubicación: monterrey

    MensajePublicado: 26/10/2007 3:23 pm
    Título:

    oooh gracias hoy mismo mejoro el codigo a ver que pasa


    saludos
    Volver arriba
          Índice del Foro elrincondelc.com -> Principiantes C/C++
    Página 1 de 1Todas las horas están en GMT - 8 Horas

     
    No puede crear mensajes
    No puede responder temas
    No puede editar sus mensajes
    No puede borrar sus mensajes
    No puede votar en encuestas

    (c) ElRincondelC.com

    Un proyecto de UrlanHeat.com