Pregunta basica de c++

Iniciado por JuanitoPerez999999, 11 Julio 2016, 02:01 AM

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

JuanitoPerez999999

Hola tengo una consulta.

Estoy haciendo un juego de preguntas en c++ para el instituto y tengo un problema.

No se como hacer para que cuando responda incorrectamente se quede en esa pregunta hasta que responda bien, me pasa que responde incorrectamente y la consola se cierra

Asi tengo el codigo si tengo algo mal que es lo mas probable diganme asi lo puedo arreglar porfavor
Código (cpp) [Seleccionar]

int main () {

int num;
char pos,j1,j2;
{

partida: j1,j2;
pos1: ;
pos2: ;
pos3: ;
pos4: ;
pos5: ;
}
printf("JUGADOR 1 RESPONDA.\n");
printf("Pregunta Numero 1:  Cual es la capital de chile:\n\n 1) Valparaiso        2) Santiago\n");
scanf("%d",&num);
while(num!=2) {printf ("Jugador 1 se mantiene en la posicion\n"); return 0;
     }
{if(num=2) printf("Jugador 1 avanza a la posicion Numero 2\n\n");
}

printf("JUGADOR 2 RESPONDA\n");
printf("Pregunta Numero 1:   Cual es la capital de brasil:\n\n 1) Brasilia         2) Rio de Janeiro\n");
scanf("%d",&num);
while(num!=1) { printf("Jugador 2 se mantiene en la posicion\n\n"); return 0;
}
{if(num=1) printf("Jugador 2 avanza a la posicion Numero 2 \n\n");

}

printf("JUGADOR 1 RESPONDA\n");
printf("Pregunta Numero 2:  Cual es la capital de Argentina:\n\n 1) Mendoza        2) Buenos aires\n");
scanf("%d",&num);
while(num!=2) {printf("Jugador 1 se mantiene en la posicion Numero 2");
 }
{if(num=2) printf("Jugador 1 avanza a la posicion Numero 3\n\n");
}

printf("JUGADOR 2 RESPONDA\n");
printf("Pregunta Numero 2:  Cual es la capital de Peru:\n\n 1) Lima              2) Cuzco\n");
scanf("%d",&num);
while(num!=1)  {printf("Jugador 2 se mantiene en la posicion Numero 2"); return 0;
  }
{if(num=1) printf("Jugador 2 Avanza a la posicion Numero 3\n\n");
}



[MOD] Al publicar codigo usar etiquetas geSHi.

+ 1 Oculto(s)

bueno la idea seria poner un while infinito asi while(true)

y tener una variable bandera que avise si la palabra coincide y cambias el valor de la variable a false, de esa forma se sale del ciclo infinito


AlbertoBSD

#2
Lo ideal es un do-while

Para que al menos entre una sola vez y solo salga si una variable esta en false.


bool entrar = true;
//...
do{
   printf("Pregunta aqui");
   scanf("%d",&variable); //recomiendo NO usar scanf
   if(variable == X) {//X tiene tu respuesta correcta
      entrar = false;
   }
}while(entrar);


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

+ 1 Oculto(s)

Citarscanf("%d",&variable); //recomiendo NO usar scanf


por que no usar scanf???


saludos... AlbertoBSD

AlbertoBSD

Detalles del input ya que muchas veces combinan esos programas con otros código que leen cadenas y el scanf no procesa el retorno de linea y cuando leen cadena en otra función lee el enter que no proceso el scanf y luego llegan aqui preguntando por que no les funciona el programa.

Mejor que procesen las cadenas manualmente y pero en fin es solo una recomendacion.

Volviendo al tema este codigo solo sale cuando el numero leido es 10.

#include<stdio.h>
#include<stdbool.h>


int main() {
bool entrar = true;
int variable;
do{
printf("10 para salir : ");
scanf("%d",&variable);
if(variable == 10) {
entrar = false;
}
}while(entrar);
return 0;
}


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

JuanitoPerez999999

aun no logro hacer que pase lo que pide el maestro


no se como hacer para que Cuando el jugador 1 responda incorrectamente le muestre que su respuesta fue incorrecta y que pase a la pregunta del siguiente jugador 2 si el jugador 2 responde correctamente pase a la pregunta N°2 y que nuevamente le muestre la pregunta al jugador 1 hasta que responda correctamente

si pudieran ayudarme con esa estructura estoy seguro que puedo hacer todo lo demas del codigo solo me falta eso

AlbertoBSD

#6
Creo que seria algo asi  :rolleyes: :silbar: solo que tiene un error y no lo localizo pero el programa despues de ese error ya esta completo  ;-) ;-) ;-)

#include<stdio.h>
#include<stdbool.h>

#define TOTAL_PREGUNTAS 10
#define OPCIONES 3
#define NUM_JUGADORES 2


int main() {
char *preguntas[TOTAL_PREGUNTAS] = {"pregunta 1","pregunta 2","pregunta 3","pregunta 4","pregunta 5","pregunta 6","pregunta 7","pregunta 8","pregunta 9","pregunta 10"};
char *opciones[TOTAL_PREGUNTAS][OPCIONES] =  {
{"P1 Opciona A","P1 Opciona B","P1 Opciona C"},
{"P2 Opciona A","P2 Opciona B","P2 Opciona C"},
{"P3 Opciona A","P3 Opciona B","P3 Opciona C"},
{"P4 Opciona A","P4 Opciona B","P4 Opciona C"},
{"P5 Opciona A","P5 Opciona B","P5 Opciona C"},
{"P6 Opciona A","P6 Opciona B","P6 Opciona C"},
{"P7 Opciona A","P7 Opciona B","P7 Opciona C"},
{"P8 Opciona A","P8 Opciona B","P8 Opciona C"},
{"P9 Opciona A","P9 Opciona B","P9 Opciona C"},
{"P10 Opciona A","P10 Opciona B","P10 Opciona C"}};
int correctas[TOTAL_PREGUNTAS] = {2,3,1,2,3,1,2,3,1,3}; //Repuestas correctas de cada pregunta
int jugadores[NUM_JUGADORES] = {0,0}; //Posicion inicial de los jugadores
int pregunta = 0,i = 0,j = 0;
bool entrar = true;
int variable = 0;
while(jugadores[0] < TOTAL_PREGUNTAS || jugadores[1] < TOTAL_PREGUNTAS ) {
i = 0;
while(i < NUM_JUGADORES){
pregunta = jugadores[i];
entrar = true;
do{
printf("Jugador %i\n",i+1);
printf("%s\n",preguntas[pregunta]);
j = 0;
while(j < OPCIONES) {
printf("%i) %s\n",j+1,opciones[pregunta][j]);
j++;
}
printf("Elija su opcion:");
scanf("%d",&variable);
if(variable == correctas[pregunta]) {
jugadores[i]++;
entrar = false;
}
else {
printf("Opcion incorrecta.\n");
}
}while(entrar);
i++;
}
}
return 0;
}


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

JuanitoPerez999999

gracias amigo me has despejado algunas dudas de verdad muchas gracias