tengo un problema con el siguiente codigo...
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
int main (void)
{
int a,b,c,i;
char cadena1[40]="calcul";
printf("mis preguntas y respuestas \n \n");
printf("escriba la pregunta: ");
gets(cadena1);
i= strcmp(cadena1,"que edad tengo?");
if (i==0){
printf("15\n\n");
}
std::cout << "desea continuar (s o n)?\n";
char answer=0;
std::cin >> answer;
switch (answer){
case 's':
return true;
case 'n':
return false;
default:
std::cout<<"tomo su respuesca como un no.\n";
return false;
}
getchar();
return 0;
}
el problema es que cuando me pregunta si deseo continuar o no y pongo la letra "s" que en un principio es para continuar en el programa sin que se cierre... no pasa eso... se me cierra!!! se que me falta algo pero no se el que es...
me podeis ayudar con esa duda que tengo???
En el switch te falto poner los: "break;"
seria algo asi:
switch (answer){
case 's':
return true;
break;
case 'n':
return false;
break;
default:
std::cout<<"tomo su respuesca como un no.\n";
return false;
}
¿Cuándo aprenderán a distinguir entre C y C++?
Cita de: Leo Gutiérrez. en 2 Agosto 2011, 01:44 AM
¿Cuándo aprenderán a distinguir entre C y C++?
Supongo que eso pasará cuando todos empiecen aprendiendo C y no directamente C++ :P
M1L0666 e puesto lo que me digistes... pero sigue cerrandose cuando le pido continuar con el programa...
No se muy bien que es lo que buscas pero creo que es esto:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
char respuesta =0;
int main (void)
{
int a,b,c,i;
char cadena1[40]="calcul";
do{
printf("mis preguntas y respuestas \n \n");
printf("escriba la pregunta: ");
gets(cadena1);
i= strcmp(cadena1,"que edad tengo?");
if (i==0){
printf("15\n\n");
}
std::cout << "desea continuar (s o n)?\n";
std::cin >> respuesta;
switch (respuesta){
case 's':
if (respuesta == 's'){
printf("ha salido con la respuesta s\n");
break;}
case 'n':
if (respuesta == 'n'){
printf("ha salido con la respuesta n");
return false;
break;}
default:
printf("ha salido sin la letra n o s");
return false;
break;
}
}while ((respuesta =='s')||(respuesta == 'S'));
getchar();
return 0;
}
Un saludo
muchas gracias por la ayuda...
aora el problema es que cuando la respuesta es que si quiero continuar no para de preguntarme si deseo continuar i no me deja poner mas la pregunta inicial...
se que falta algun detalle que se nos a escapado... pero aun asi... muchisimas gracias por la aclaracion
¿Has probado el code que te he pasado? :-\ Hace eso que pides...
Un saludo
si que lo e provado... i cuando pongo la "s" de si que quiero continuar despues de la pregunta inicial me lase el principio de todo pero tambien me pregunta si quiero continuar i no me deja volver a poner "que edad tengo?"
es decir que no para de preguntarme si quiero continuar
por eso decia que se nos escapa algun detalle... i es para que no me vuelva a preguntar si quiero continuar despues de poner la "s" (para que solo me lo pregunte una vez)
Explicanos con lujo de detalles que quieres que haga el programa,porque sigo sin enterarme bien :-\
Un saludo
lo que quero es:
1. el programa tiene que preguntarte (que pregunta quieres acer)
2. cuando aces la pregunta te sale automaticamente la respuesta
3. cuando a salido la respuesta te pregunta el programa (quieres continuar o no)
4. al responder (si quiero continuar) vuelve al principio
resultados actuales:
1. el programa te pregunta (que pregunta quieres acer)
2. cuando aces la pregunta te sale la respuesta automaticamente
3. cuando a salido la respuesta te pregunta si quieres continuar o no
4. AQUI ESTA EL PROBLEMA al responder (si quiero continuar) te sigue preguntando (si quieres continuar)
Esto es lo que quieres,pero te falta añadir muchas preguntas y sus respuesta:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
int main (void)
{
int i;
char cadena1[40]="";
char respuesta =0;
do{
printf("mis preguntas y respuestas \n \n");
printf("escriba la pregunta: ");
gets(cadena1);
i= strcmp(cadena1,"que edad tengo?");
if (i==0){
printf("15\n\n");
}
std::cout << "desea continuar (s o n)?\n";
std::cin >> respuesta;
setbuf(stdin,NULL);
switch (respuesta){
case 's':
printf("ha salido con la respuesta s\n");
break;
case 'n':
printf("ha salido con la respuesta n");
return false;
break;
default:
printf("ha salido sin la letra n o s");
return false;
break;
}
}while ((respuesta =='s')||(respuesta == 'S'));
getchar();
return 0;
}
En respuesta a peterfly: necesitas un buen libro o curso sobre C++ y seguirlo a detalle ya que con "palos de ciego" ni aprendes bien ni aprendes rápido. Revisa los temas fijos de este foro, ahí hay información para entretenerse por meses.
En cuanto al programa honestamente no lo veo sentido pero se puede hacer asi:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
#include <string>
using std::string;
#include <limits>
using std::numeric_limits;
int main ()
{
string pregunta;
char continuar;
do {
cout << "Escribe la pregunta: ";
getline(cin, pregunta);
if (pregunta == "que edad tengo?")
cout << "Pregunta correcta!" << endl;
else
cout << "Pregunta incorrecta!" << endl;
cout << "Desea continuar (s o n)?" << endl;
std::cin >> continuar;
cin.ignore(numeric_limits<int>::max(), '\n');
} while (continuar == 's' || continuar == 'S');
return 0;
}
----
Un comentario sobre el programa de Dark Invader , el uso de la función:
setbuf(stdin,NULL);
Para así vaciar el bufer de la entrada estándar no es correcto ya que esa función termina en una llamada a "setvbuf". El problema aquí es que esta ultima solo puede llamarse antes de cualquier uso del stream (salvo su apertura con fopen).
Un saludo
muchisimas gracias a todos... tema solucionado