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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda! Error con sentencia do while
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda! Error con sentencia do while  (Leído 1,804 veces)
Chandalero

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Ayuda! Error con sentencia do while
« en: 9 Mayo 2018, 16:11 pm »

LLevaba unos dias intentando registrarme y al fin lo he conseguido (el captcha no funciona pero de casualidad me he metido desde modo incognito y se mostraba sin problema ;-) ).
El caso es que estoy aprendiendo c con el "Manual Imprescindible de C/C++" y me gusta hacer mis chorradas y este codigo me da error en la linea -- .Cabe decir que llevo una semana con esto y supongo que mi codigo debe ser sucio de narices asi que cualquier consejo, lo agradezco, si me ayuda a quitar o evitar malos habitos.
Error que me dice CodeBlocks:
Citar
||=== Build file: "no target" in "no project" (compiler: unknown) ===|
Z:\8-Documentos\c\pau\versiencpp.cpp||In function 'int main()':|
Z:\8-Documentos\c\pau\versiencpp.cpp|40|warning: extended initializer lists only available with -std=c++11 or -std=gnu++11|
Z:\8-Documentos\c\pau\versiencpp.cpp|43|error: expected primary-expression before 'do'|
Z:\8-Documentos\c\pau\versiencpp.cpp|43|error: expected '}' before 'do'|
Z:\8-Documentos\c\pau\versiencpp.cpp|43|error: expected ',' or ';' before 'do'|
Z:\8-Documentos\c\pau\versiencpp.cpp|94|error: expected '}' at end of input|
||=== Build failed: 4 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|
Y aqui mi codigo, lo que busco es si no tienes "tienes" la llave y "abres" la puerta, no salgas del Switch ;D
Código:
/*Bibliotecas*/
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

/*variables y constantes*/
int opcionnombreusuario;
char nombre[20];
int opcionllavepuertaventana;
int posesionllave = 0;

/*programa principal*/
int main (void)
{
/*titulo*/
    printf ("Juego\n\n");
    Sleep(200);

/*seleccion de nombre y confirmacion de este*/
    do
        {
            printf ("\n\nInserte un nombre de usuario en minisculas y pulse Intro: ");
            std::cin >> nombre;
            fflush (stdin);
            printf ("\nEntonces tu nombre es %s?" ,nombre);
            printf ("\n1-Si\n2-No\n");
            std::cin >> opcionnombreusuario;
            fflush (stdin);
            system("cls");
        }
    while (opcionnombreusuario != 1);

/*planteamiento llave ventana puerta*/
    printf ("\nSaludos %s, bienvenido a mi lamentable aventura de texto, espero que disfrutes!", nombre);
    Sleep (2000);
    system("cls");

/*funcion primera pantalla para llamar en case2*/
int pantallallavespuertaventana {

/* do while para que se repita la pantalla mientras no tenga la llave */
    do
        {

            printf("\n%s, acabas de aparecer en una habitacion extrana, puedes ver una ventana con rejas, una puerta y una llave.\nQue escojes?\n\n1-Ventana\n2-Puerta\n3-Investiga\n");
            std::cin >> opcionllavepuertaventana ;
            fflush (stdin);
/*Switch que da sentencias para las opciones de la primera pantalla */
            switch (opcionllavepuertaventana)
            {
                case 1: printf ("Vaya, parece que la ventana tiene rejas, es imposible salir por aqui.");

                        Sleep (3000);
                        system ("cls");
                        break;



                case 2: if (posesionllave !=  1)
                                {
                                printf ("Que mal, parece que la cerradura necesita una llave");
                                Sleep (3000);
                                system ("cls");
                                pantallallavespuertaventana ();
                                }
                        if (posesionllave == 1)
                                {
                                printf ("Has abierto la puerta con la llave");
                                Sleep (3000);
                                }
                                break;



                case 3: printf ("Investigando por el suelo te has encontrado una llave! Me pregunto como debe haber salido el que se la dejo dentro...");
                        posesionllave = 1;

                        Sleep (3000);
                        system ("cls");
                        break;

                default: printf ("Escoje una opcion valida, %s", nombre);
                        Sleep (3000);
                        system ("cls");
}
}


    while ((posesionllave != 1)  && (opcionllavepuertaventana != 2));
    printf ("Has abierto la puerta!");
}

}
Como soluciono esto?


En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: Ayuda! Error con sentencia do while
« Respuesta #1 en: 9 Mayo 2018, 16:59 pm »

eso es por que te has inventado una nueva estructura de control de flujo
Código
  1. int pantallallavespuertaventana{
  2.    /*codigo
  3.        ...
  4.        ...
  5.        ...*/
  6.  

no puedes poner esto en el código si quieres que se repita el código al llegar al caso 2 tienes que hacerlo de forma diferente, yo lo he echo de la siguiente manera

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <windows.h>
  5.  
  6. /*variables y constantes*/
  7. int opcionnombreusuario;
  8. char nombre[20];
  9. int opcionllavepuertaventana;
  10. int posesionllave = 0;
  11.  
  12. /*programa principal*/
  13. int main (int argc, char* argv[]){
  14. /*titulo*/
  15. printf ("Juego\n\n");
  16. Sleep(200);
  17.  
  18. /*seleccion de nombre y confirmacion de este*/
  19. do{
  20. printf ("\n\nInserte un nombre de usuario en minisculas y pulse Intro: ");
  21. std::cin >> nombre;
  22. fflush (stdin);
  23. printf ("\nEntonces tu nombre es %s?" ,nombre);
  24. printf ("\n1-Si\n2-No\n");
  25. std::cin >> opcionnombreusuario;
  26. fflush (stdin);
  27. system("cls");
  28. }while (opcionnombreusuario != 1);
  29.  
  30. /*planteamiento llave ventana puerta*/
  31. printf ("\nSaludos %s, bienvenido a mi lamentable aventura de texto, espero que disfrutes!", nombre);
  32. Sleep (2000);
  33. system("cls");
  34.  
  35. /* do while para que se repita la pantalla mientras no tenga la llave */
  36. do{
  37.  
  38. printf("\nacabas de aparecer en una habitacion extrana, puedes ver una ventana con rejas, una puerta y una llave.\nQue escojes?\n\n1-Ventana\n2-Puerta\n3-Investiga\n");
  39. std::cin >> opcionllavepuertaventana ;
  40. fflush (stdin);
  41. /*Switch que da sentencias para las opciones de la primera pantalla */
  42. switch (opcionllavepuertaventana){
  43. case 1: printf ("Vaya, parece que la ventana tiene rejas, es imposible salir por aqui.");
  44. Sleep (3000);
  45. system ("cls");
  46. break;
  47. case 2: if (posesionllave !=  1)
  48. {
  49. printf ("Que mal, parece que la cerradura necesita una llave");
  50. Sleep (3000);
  51. system ("cls");
  52. }
  53. if (posesionllave == 1){
  54. printf ("Has abierto la puerta con la llave");
  55. Sleep (3000);
  56. }
  57. break;
  58. case 3: printf ("Investigando por el suelo te has encontrado una llave! Me pregunto como debe haber salido el que se la dejo dentro...");
  59. posesionllave = 1;
  60. Sleep (3000);
  61. system ("cls");
  62. break;
  63. default: printf ("Escoje una opcion valida, %s", nombre);
  64. Sleep (3000);
  65. system ("cls");
  66. }
  67. }while ((posesionllave != 1));
  68. printf ("Has abierto la puerta!");
  69. }
  70.  
y me funciona perfecto


« Última modificación: 9 Mayo 2018, 17:14 pm por Kenji-chan » En línea

Chandalero

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Ayuda! Error con sentencia do while
« Respuesta #2 en: 9 Mayo 2018, 19:49 pm »

eso es por que te has inventado una nueva estructura de control de flujo
Código
  1. int pantallallavespuertaventana{
  2.    /*codigo
  3.        ...
  4.        ...
  5.        ...*/
  6.  

no puedes poner esto en el código si quieres que se repita el código al llegar al caso 2 tienes que hacerlo de forma diferente, yo lo he echo de la siguiente manera

Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <windows.h>
  5.  
  6. /*variables y constantes*/
  7. int opcionnombreusuario;
  8. char nombre[20];
  9. int opcionllavepuertaventana;
  10. int posesionllave = 0;
  11.  
  12. /*programa principal*/
  13. int main (int argc, char* argv[]){
  14. /*titulo*/
  15. printf ("Juego\n\n");
  16. Sleep(200);
  17.  
  18. /*seleccion de nombre y confirmacion de este*/
  19. do{
  20. printf ("\n\nInserte un nombre de usuario en minisculas y pulse Intro: ");
  21. std::cin >> nombre;
  22. fflush (stdin);
  23. printf ("\nEntonces tu nombre es %s?" ,nombre);
  24. printf ("\n1-Si\n2-No\n");
  25. std::cin >> opcionnombreusuario;
  26. fflush (stdin);
  27. system("cls");
  28. }while (opcionnombreusuario != 1);
  29.  
  30. /*planteamiento llave ventana puerta*/
  31. printf ("\nSaludos %s, bienvenido a mi lamentable aventura de texto, espero que disfrutes!", nombre);
  32. Sleep (2000);
  33. system("cls");
  34.  
  35. /* do while para que se repita la pantalla mientras no tenga la llave */
  36. do{
  37.  
  38. printf("\nacabas de aparecer en una habitacion extrana, puedes ver una ventana con rejas, una puerta y una llave.\nQue escojes?\n\n1-Ventana\n2-Puerta\n3-Investiga\n");
  39. std::cin >> opcionllavepuertaventana ;
  40. fflush (stdin);
  41. /*Switch que da sentencias para las opciones de la primera pantalla */
  42. switch (opcionllavepuertaventana){
  43. case 1: printf ("Vaya, parece que la ventana tiene rejas, es imposible salir por aqui.");
  44. Sleep (3000);
  45. system ("cls");
  46. break;
  47. case 2: if (posesionllave !=  1)
  48. {
  49. printf ("Que mal, parece que la cerradura necesita una llave");
  50. Sleep (3000);
  51. system ("cls");
  52. }
  53. if (posesionllave == 1){
  54. printf ("Has abierto la puerta con la llave");
  55. Sleep (3000);
  56. }
  57. break;
  58. case 3: printf ("Investigando por el suelo te has encontrado una llave! Me pregunto como debe haber salido el que se la dejo dentro...");
  59. posesionllave = 1;
  60. Sleep (3000);
  61. system ("cls");
  62. break;
  63. default: printf ("Escoje una opcion valida, %s", nombre);
  64. Sleep (3000);
  65. system ("cls");
  66. }
  67. }while ((posesionllave != 1));
  68. printf ("Has abierto la puerta!");
  69. }
  70.  
y me funciona perfecto
Muchas gracias compañero! Voy  a estudiar un poco el por qué de mi fallo! ;-)
Quiero entender por que no funcionaba.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ayuda con sentencia sql
Programación Visual Basic
CARRY-ON 4 2,167 Último mensaje 6 Octubre 2007, 19:31 pm
por CARRY-ON
Ayuda con sentencia sql « 1 2 3 »
Bases de Datos
50l3r 24 16,869 Último mensaje 26 Marzo 2010, 20:13 pm
por ssccaann43 ©
Ayuda con sentencia sql!!
Bases de Datos
Hartigan 4 3,272 Último mensaje 28 Julio 2010, 16:52 pm
por ssccaann43 ©
cual es mi error: sentencia SQL
Bases de Datos
lapras 2 3,173 Último mensaje 23 Octubre 2010, 00:48 am
por Shell Root
Sentencia Goto en Php , Salto de sentencia en Php
PHP
Graphixx 3 4,026 Último mensaje 24 Mayo 2012, 17:46 pm
por Graphixx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines