ejercicio en C

Iniciado por howaboutno, 29 Octubre 2012, 19:18 PM

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

howaboutno

hola!
para el siguiente problema: llevo dandole vueltas y me he ido liando...lo que tengo es esto pero no me funciona, ya no se que hacer... alguien me puede sacar del lio que tengo?
Leer una cadena  de hasta 80 caracteres y pasarla en función de una variable
de opción (menu) a mayúsculas ó a minúsculas e imprimir la cadena resultante



#include <stdio.h>
#include <string.h>
#include <ctype.h>
    int menu(void);
   void mayus(char*);
   void minus(char*);
   int main()
   {       char frase[80];
   
           printf("Introduce una frase \n");
           fflush(stdout);
           fflush(stdin);
           gets(frase);
   
           menu();
           mayus(frase);
           minus(frase);
           return 0;
   } //fin del main
   
   int menu(void)
   {
           int opcion;
           printf("1.Pasar a mayusculas\n");
           fflush(stdout);
           printf("2.Pasar a minúsculas\n");
           fflush(stdout);
           do
           {
           printf("Introduce opción: \n");
           fflush(stdout);
           scanf("%d",&opcion);
           }while(opcion<1 || opcion>2);
           return opcion;
   
       
   } //fin del menu
   
   void mayus(char *frase)
   {
           int t;
           char *p;
           p=frase;
         
           for(t=0;frase[t];t++)
                   {
                   frase[t]=toupper(frase[t]);
                   p++;
                   }
           printf("%s",p);
           fflush(stdout);
   } //fin de funcion mayusculas
   
   void minus(char *frase)
   {
           int t;
           for(t=0;t<strlen(frase);t++)
                   {
                   frase[t]=tolower(frase[t]);
           printf("%s",frase);
           fflush(stdout);
                   }
   } //fin de funcion minusculas
 

Caster

Buenas!

Bueno supongo que en el codigo que quieres compilar incluiras las librerias, aunque aqui no las muestras, sin ellas no pretendas que te compile el codigo:

#include <stdio.h>
#include <string.h>


Depues, en la funcion mayus(), utilizas la variable t, pero la tienes como un comentario, aasi que realmente no esta declarada:

//int t;

Y despues otros consejos:

-Evita el uso de gets()
-Evita el uso de fflush(stdin)

Mirate este post y lo veras con mas detalle:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Otro fallo, elijas la opcion que elijas siempre se ejecutara primero la funcion mayus() y despues minus() porque si que haces al ususario escoger la opcion, pero despues no esta programador para que se ejecute segun el susuario elija, no se si me explico bien.

Saludos

PD: Edita tu post y pon tu codigo entre etiquetas geshi, para que sea mas facil de leer

howaboutno

Cita de: Caster en 29 Octubre 2012, 20:35 PM
Buenas!

Bueno supongo que en el codigo que quieres compilar incluiras las librerias, aunque aqui no las muestras, sin ellas no pretendas que te compile el codigo:

#include <stdio.h>
#include <string.h>


Depues, en la funcion mayus(), utilizas la variable t, pero la tienes como un comentario, aasi que realmente no esta declarada:

//int t;

Y despues otros consejos:

-Evita el uso de gets()
-Evita el uso de fflush(stdin)

Mirate este post y lo veras con mas detalle:

http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html

Otro fallo, elijas la opcion que elijas siempre se ejecutara primero la funcion mayus() y despues minus() porque si que haces al ususario escoger la opcion, pero despues no esta programador para que se ejecute segun el susuario elija, no se si me explico bien.

Saludos

PD: Edita tu post y pon tu codigo entre etiquetas geshi, para que sea mas facil de leer

ya, lo del int t; ha sido fallo mio pero no por eso no funciona, entre tantos cambios que he hecho lo habré liado mas de la cuenta. Si, en eso pensaba yo, en lo del menú que se ejecutan aparte, pero como lo hago para que se ejecute en funcion de la opcion elegida?

Caster

Ya se, tambien hay algunos fallos en los bucles para transformar la cadena, tu primero leete el post que te deje mas arriba, editalo con los consejos que se dan, y vuelve a postear el codigo y yo te ayudo. Para que se ejecute una funcion segun lo que elijas se neceita una estructura condicional, como puede ser un if - else, o un switch por ejemplo.

Saludos

leosansan

Tienes que pasar a la función menú la variable opción por referencia, para luego usar el valor adecuado en la función main.
Por otro lado en los for puedes poner la condición terminar de leer frase al llegar al carácter nulo='\0'. Más o menos te quedaría así:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
    int menu(int *opcion);
    void mayus(char*);
    void minus(char*);
    int main()
    {       char frase[80];
            int opcion=0,op;
            printf("Introduce una frase \n");
            gets(frase);
            op=menu(&opcion);
            if (op==1)
                mayus(frase);
            if (op==2)
                minus(frase);
            return 0;
    }

    int menu(int *opcion)
    {
            printf("1.Pasar a mayusculas\n");
            printf("2.Pasar a minusculas\n");
            do
            {
            printf("Introduce opcion: \n");
                        scanf("%d",&opcion);
            }while(opcion<1 || opcion>2);
            return opcion;
    }

    void mayus(char *frase)
    {
           int t;
            for(t=0;frase[t]!='\0';t++)
                    frase[t]=toupper(frase[t]);
            printf("%s",frase);
    }

    void minus(char *frase)
    {
            int t;
            for(t=0;frase[t]!='\0';t++)
                    frase[t]=tolower(frase[t]);
            printf("%s",frase);
        }

Saludos!.

howaboutno

Cita de: Caster en 29 Octubre 2012, 21:38 PM
Ya se, tambien hay algunos fallos en los bucles para transformar la cadena, tu primero leete el post que te deje mas arriba, editalo con los consejos que se dan, y vuelve a postear el codigo y yo te ayudo. Para que se ejecute una funcion segun lo que elijas se neceita una estructura condicional, como puede ser un if - else, o un switch por ejemplo.

Saludos

muchas gracias, ya lo he leído pero es que la profesora que me da el curso de programación nos obliga a poner el gets, el fflush...

howaboutno

Cita de: leosansan en 29 Octubre 2012, 21:53 PM
Tienes que pasar a la función menú la variable opción por referencia, para luego usar el valor adecuado en la función main.
Por otro lado en los for puedes poner la condición terminar de leer frase al llegar al carácter nulo='\0'. Más o menos te quedaría así:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
    int menu(int *opcion);
    void mayus(char*);
    void minus(char*);
    int main()
    {       char frase[80];
            int opcion=0,op;
            printf("Introduce una frase \n");
            gets(frase);
            op=menu(&opcion);
            if (op==1)
                mayus(frase);
            if (op==2)
                minus(frase);
            return 0;
    }

    int menu(int *opcion)
    {
            printf("1.Pasar a mayusculas\n");
            printf("2.Pasar a minusculas\n");
            do
            {
            printf("Introduce opcion: \n");
                        scanf("%d",&opcion);
            }while(opcion<1 || opcion>2);
            return opcion;
    }

    void mayus(char *frase)
    {
           int t;
            for(t=0;frase[t]!='\0';t++)
                    frase[t]=toupper(frase[t]);
            printf("%s",frase);
    }

    void minus(char *frase)
    {
            int t;
            for(t=0;frase[t]!='\0';t++)
                    frase[t]=tolower(frase[t]);
            printf("%s",frase);
        }

Saludos!.

muchas gracias!! ya he visto mis fallos que son bastantes, aun me queda por aprender, pero dicen que de los fallos se aprende :P

leosansan

Cita de: howaboutno en 29 Octubre 2012, 22:44 PM
muchas gracias!! ya he visto mis fallos que son bastantes, aun me queda por aprender, pero dicen que de los fallos se aprende :P
Muy bien, eso es aptitud positiva.
Saludos!.

howaboutno

bueno, lo he retocado y me ha quedado asi


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

char menu(void);
void mayus(char []);
void minus(char []);
int main(void) {
char frase[80];
int opc;

printf("Introduce una cadena \n");
fflush(stdout);
fflush(stdin);
gets(frase);

printf("Elige una opción: \n");
fflush(stdout);
opc=menu();
if(opc=='1')
mayus(frase);
if (opc=='2')
minus(frase);


return 0;
}

char menu(void)

{ char opcion;

do
{
printf("1.Pasara a mayúsculas \n");
printf("2. Pasar a minusuclas \n");
fflush(stdout);
scanf("%c",&opcion);
} while(strchr("12",opcion)==NULL);
return opcion;
} //fin del menu

void mayus(char frase [])

{
int t;

for(t=0;t<strlen(frase);t++)
{
if(islower(frase[t]) !=0)
{
frase[t]=toupper(frase[t]);
}
}
printf("%s",frase);
fflush(stdout);
} //fin de mayus

void minus(char frase [])

{
int t;

for(t=0;t<strlen(frase);t++)
{
if(isupper(frase[t]) !=0)
{
frase[t]=tolower(frase[t]);
}
}
printf("%s",frase);
fflush(stdout);
} //fin de minus