elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ejercicio en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ejercicio en C  (Leído 3,129 veces)
howaboutno

Desconectado Desconectado

Mensajes: 38


Ver Perfil
ejercicio en C
« en: 29 Octubre 2012, 19:18 pm »

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


 
Código:
#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
 


« Última modificación: 29 Octubre 2012, 21:07 pm por howaboutno » En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: ejercicio en C
« Respuesta #1 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:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  

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

Código
  1. //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


En línea

howaboutno

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: ejercicio en C
« Respuesta #2 en: 29 Octubre 2012, 21:05 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:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  

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

Código
  1. //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?
En línea

Caster


Desconectado Desconectado

Mensajes: 786


Ver Perfil WWW
Re: ejercicio en C
« Respuesta #3 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
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: ejercicio en C
« Respuesta #4 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
  1. #include <stdio.h>
  2. #include <string.h>
  3.    int menu(int *opcion);
  4.    void mayus(char*);
  5.    void minus(char*);
  6.    int main()
  7.    {       char frase[80];
  8.            int opcion=0,op;
  9.            printf("Introduce una frase \n");
  10.            gets(frase);
  11.            op=menu(&opcion);
  12.            if (op==1)
  13.                mayus(frase);
  14.            if (op==2)
  15.                minus(frase);
  16.            return 0;
  17.    }
  18.  
  19.    int menu(int *opcion)
  20.    {
  21.            printf("1.Pasar a mayusculas\n");
  22.            printf("2.Pasar a minusculas\n");
  23.            do
  24.            {
  25.            printf("Introduce opcion: \n");
  26.                        scanf("%d",&opcion);
  27.            }while(opcion<1 || opcion>2);
  28.            return opcion;
  29.    }
  30.  
  31.    void mayus(char *frase)
  32.    {
  33.           int t;
  34.            for(t=0;frase[t]!='\0';t++)
  35.                    frase[t]=toupper(frase[t]);
  36.            printf("%s",frase);
  37.    }
  38.  
  39.    void minus(char *frase)
  40.    {
  41.            int t;
  42.            for(t=0;frase[t]!='\0';t++)
  43.                    frase[t]=tolower(frase[t]);
  44.            printf("%s",frase);
  45.        }
  46.  
Saludos!.
En línea

howaboutno

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: ejercicio en C
« Respuesta #5 en: 29 Octubre 2012, 22:43 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...
En línea

howaboutno

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: ejercicio en C
« Respuesta #6 en: 29 Octubre 2012, 22:44 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
  1. #include <stdio.h>
  2. #include <string.h>
  3.    int menu(int *opcion);
  4.    void mayus(char*);
  5.    void minus(char*);
  6.    int main()
  7.    {       char frase[80];
  8.            int opcion=0,op;
  9.            printf("Introduce una frase \n");
  10.            gets(frase);
  11.            op=menu(&opcion);
  12.            if (op==1)
  13.                mayus(frase);
  14.            if (op==2)
  15.                minus(frase);
  16.            return 0;
  17.    }
  18.  
  19.    int menu(int *opcion)
  20.    {
  21.            printf("1.Pasar a mayusculas\n");
  22.            printf("2.Pasar a minusculas\n");
  23.            do
  24.            {
  25.            printf("Introduce opcion: \n");
  26.                        scanf("%d",&opcion);
  27.            }while(opcion<1 || opcion>2);
  28.            return opcion;
  29.    }
  30.  
  31.    void mayus(char *frase)
  32.    {
  33.           int t;
  34.            for(t=0;frase[t]!='\0';t++)
  35.                    frase[t]=toupper(frase[t]);
  36.            printf("%s",frase);
  37.    }
  38.  
  39.    void minus(char *frase)
  40.    {
  41.            int t;
  42.            for(t=0;frase[t]!='\0';t++)
  43.                    frase[t]=tolower(frase[t]);
  44.            printf("%s",frase);
  45.        }
  46.  
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
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: ejercicio en C
« Respuesta #7 en: 29 Octubre 2012, 23:28 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!.
En línea

howaboutno

Desconectado Desconectado

Mensajes: 38


Ver Perfil
Re: ejercicio en C
« Respuesta #8 en: 30 Octubre 2012, 13:34 pm »

bueno, lo he retocado y me ha quedado asi

Código:
#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

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejercicio 506
Ejercicios
ieman 0 3,941 Último mensaje 13 Mayo 2005, 17:42 pm
por ieman
Ejercicio en C
Ejercicios
ߣ@î§ 3 10,855 Último mensaje 4 Septiembre 2005, 06:31 am
por ߣ@î§
Help Ejercicio 122 en C
Ejercicios
ANELKAOS 4 5,189 Último mensaje 15 Septiembre 2005, 23:41 pm
por Arcangel_RZ
[Ejercicio] Aca tienen un ejercicio para practicar « 1 2 3 »
Programación Visual Basic
Dreamaker 20 16,655 Último mensaje 5 Septiembre 2010, 02:57 am
por TGa.
ejercicio conclase pag 70 ejercicio 1
Programación C/C++
flony 2 4,596 Último mensaje 17 Octubre 2010, 12:16 pm
por Akai
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines