Dev - C++ - Condicionante if else

   
Vista:

Condicionante if else

Publicado por Ricardo (1 intervención) el 17/11/2014 04:00:06
Hola que tal, tengo un problema con mi tarea y esque al final en la condicionante cuando lo pongo a correr no resulta lo que espero y ya llevo varios dias intentandolo. Se supone que al preguntar si es alumno el debe contestar si o no y al decir si que el programa diga"Bienvenido a la preparatoria 6" y si dice que no "no eres un alumno de verdad"
Pero no me resulta al contestar si o no me dice solo una de las frases que no es.
aqui mi trabajo:

#ifdef __MSDOS__
#include <cstdlib>
#include <iostream>

#else
#include <iostream>
#include <cstdlib>

using namespace std;

#endif

int main()
{
char nombre[30],apellido[30], grupo[10], amigo[30], si, no, alumno;
int codigo, grado, promedio;
cout<<"Hola que tal, mi nombre es Cortana. ¿Y el tuyo?"<<endl;
cin>> nombre;
cout<<"Que buen nombre, y que tal tu apellido.."<<endl;
cin>> apellido;
cout<<"Mucho gusto "<<nombre<<":)"<<endl;
cout<<"Me puedes proporcionar tu codigo de alumno por favor. "<<endl;
cin>> codigo;
cout<<"¿Cual es el grado que actualmente cursas? "<<endl;
cin>> grado;
cout<<"y el grupo en el que te encuentras cursando? "<<endl;
cin>> grupo;
cout<<"Genial! yo estuve en ese mismo. La escuela fue de lo mejor en mi vida, pero en fin sigamos "<<nombre<<endl;
cout<<"¿Quien es tu mejor amigo de tu Tae ?"<<endl;
cin>> amigo;
cout<<"Es muy bueno tener un amigo en el cual apoyarte, cuidalo, ellos son valiosos."<<endl;
cout<<"Y dime ¿cual es tu promedio ?"<<endl;
cin>> promedio;
cout<<"Por ultimo, ¿Eres alumno de la Preparatoria 6 ?"<<endl;
cin>>alumno;
if(alumno>=si)
{
cout<<"Bienvenido a Preparatoria 6"<<alumno<<si<<endl;
}
else
cout<<"No eres un alumno de verdad"<<alumno<<no<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

Condicionante if else

Publicado por vangodp (287 intervenciones) el 17/11/2014 13:31:00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
using namespace std;
 
int main() {
    char nombre[30], apellido[30], grupo[10], amigo[30], si, no, alumno;
    int codigo, grado, promedio;
 
    //caso 1: Alumno es un char segun como lo declaraste, asi que nunca puedes comparar un char (ejemplo 's') con un string("si").
    //un ejemplo seria
    cout << "Eres alumno? (conteste 's' para si y 'n' para no)" << endl;
    cin >> alumno;
    cin.sync(); // esto sincroniza el bufer con lo introducido por teclado. Evita errores, si lo quitas puede fallar el programa. Se usa despues de leer un char y un string consecutivos, prueba comentarlo y veras el porque.    
    if ( alumno == 's' ) {  //compara char con char
        cout << "Bienvenido a Preparatoria 6" << alumno << si << endl;
    } else
        cout << "No eres un alumno de verdad" << alumno << no << endl;
 
    //caso 2: alumno2 ahora es un string y si puedes comparar con un char o un string.
    //comparar un string con un string
    string alumno2;  //alumno2 es un string. los strings se pueden comparar con strings y chars
    cout << "Eres alumno2? (conteste \"si\" y \"no\", o 's' para si y 'n' para no )" << endl;
    cin >> alumno2;
 
    //si contestas con un string ejemplo "si" o "no" te va salir esos casos...
    if (alumno2 == "si"){
        cout << "Has dicho \"si\" alumno2." << endl;
 
    }else if ( alumno2 == "no" ){
        cout << "Has dicho \"no\" alumno2." << endl;
 
    //Y si contestas con un char ejemplo 's' o 'n' te va a salir estos casos...
    }else if ( alumno2 == "s" ) {
        cout << "Has dicho 's', o sea que si.. alumno2." << endl;
 
    }else if ( alumno2 == "n" ){
        cout << "Has dicho 'n', o sea que no.. alumno2." << endl;
 
    //Por otro lado si contestas algo distinto a lo que se espera...
    }else{
        cout << "alumno2... no existe esta opcion :S" << endl;
    }
 
 
 
    //system ( "PAUSE" );
    cin.ignore();         // use esto en vez de system ( "PAUSE" ), es un disparate llamar al sistema solo para que pause, y asi te ajoras tener que incluir cstdio para pausar. 
    return EXIT_SUCCESS;
}

Eso es por que estas comparando un char con un string.
recuerde algo. Para almacenar una letra en un char hago char variable = 'a'; Recuerde que lleva las colmillas simples para char 'a'.

pero si lo que quiero es comparar cadenas y estas en C++, no necesitas usar cadenas de caracteres. Usa strings que es mejor y te ahoras el problema.

Para comparar strings al estilo c debes usar la funcion strcomp(cadena1, cadena2); donde cadena 1 y 2 pueden ser asi char cadena1[100] y char cadena2[100].

Pero en c++ no necesitas eso si al crear la variable la creas como string cadena.

para comparar cadenas que son cadenas de caracteres estilo c se hace asi:
if ( !strcomp(cadena1, cadena2) ){
//son iguales
}else{
//son diferentes
}

pero en c++ no te hace falta la funcion si la cadena es del tipo string.
Si la cadena es del tipo string se hace asi:
string cadena;
if (cadena == "si"){
//cadena es igual a "si"
}else{
//cadena es distinta a "si"
}

para saber si el usuario entro con si o no seria como lo descrito en el codigo:
if (cadena == "si"){
//cadena es igual a "si"
}else if ( cadena == "no" ){
}else{
//cadena es distinta a "si" y "no"
}

como puedes ver si la variable es una cadena de caracteres como char c[100] uso strcomp(c, "si" ); compara la cadena de caracteres c con el string si.
algunos ejemplos son:
char c[100] = "si";
char c2[100] = "no";
strcomp(c, "si" ); //en ese caso es igual
strcomp(c, c2); //en ese caso son diferentes

strcomp(strin1, string2) devuelve 0 si son iguales, un numero menor que cero si la primera cadena es mayor o mayor que 0 si la segunda cadena es mayor y por eso ponemos ! delante en el if, por que como devuelve 0 si son iguales pues hacemos que ese cero sea uno invertiendole con ! delante de strcomp().

Ya para los strings de C++ sim mas complicaciones puedes hacer directo:

string str;
if (str == "si")
if (str == "no")
if (str == "s")
if (str == "n")
No te hace falta la funcion strcomp(). Por cierto para que funcione strcomp en c necesitas incluir la libreria string.h

y por ultimo decir que si quiero comparar un string de C++ con una cadena de caracteres estilo C debo hacer letra a letra, o bien se puede usar strcomp() de esta forma:
string str;
char cadenaCaracteres[100];

if ( !strcomp( str.c_str(), cadenaCaracteres ) )

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <cstring>
using namespace std;
 
int main() {
    string str = "si";
    char cadenaCaracteres[100] = "si";
 
    if ( !strcmp ( str.c_str(), cadenaCaracteres ) ) {
        cout << "son iguales" << endl;
    }
}

En fin... son muchas formas como puedes ver. Todo depende de si quieres hacer al estilo C, C++ o ambas.

Si necesitas ayuda puedes agregarme en skype y te puedo quitar algunas dudas que tengas.
Pero te dejo eso un recurso que a mi me ha servido mucho en mis inicios que es esta pagina: http://v1.minidosis.org/C++/
Esta es una nueva version de la misma pagina, pero aun me gusta mas la primera: http://www.minidosis.org/#/
Eso si.. la segunda tiene mejores ejercicios pero la primera tiene los videos mas facil de encontrar XDD.

Por cierto, en skype me llamo igual XDD.

Suerte ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar