Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 24, 2008, 09:14:16
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: De nuevo una calculadora. Condiciones con string.h 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: De nuevo una calculadora. Condiciones con string.h  (Leído 85 veces)
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« en: Febrero 02, 2008, 12:32:25 »

Bueno, pues ya habéis visto que yo solo aprendo haciendo calculadoras xD.
Pues el caso es que me dio por usar la funcion strlen de string.h/cstring para que el programa sepa que hacer con los datos, pero la posteo porque tengo unas preguntillas...

Code:


//test para dar uso a las funciones de la libreria de cString

#include <iostream>
#include <cstring>


int suma(int a, int b)
{
   return a + b;
}

int resta(int a, int b)
{
   return a - b;
}

int multiplicar(int a, int b)
{
   return a * b;
}

int dividir(int a, int b)
{
   return a / b;
}


//Aquí son todas variables globales para poder facilitar lo máximo posible los datos de cálculo
int tester;
char cadena[10];
int test2 = 3;

int main(int a, int b)
{
   
   while (test2 == 3)
   {
   std::cout << "\n" << "Introduce la operación que quieres realizar:";
   std::cin >> cadena;
   tester = strlen(cadena);
   std::cout << "\n" << "Introduce el primer elemento: ";
   std::cin >> a;
   std::cout << "\n" << "Ahora introduce el segundo elemento: ";
   std::cin >> b;

   
   switch(tester){
   case 5:
      if (cadena[0] == 's')
      {
         tester =suma(a,b);
      }

break;
   case 7:
      tester =dividir(a,b);break;
   case 11:
      tester = multiplicar(a,b);break;
   };
   
      if (cadena[0] == 'r')
      {
         tester =resta(a, b);
      }
   
      std::cout << "\n" << "El resultado de la operacion es: " << tester;
   }

   return 0;
}

Lo de arriba me funciona de PM, pero cuando en un principio la puse asi:


//test para dar uso a las funciones de la libreria de c String

#include <iostream>
#include <cstring>


int suma(int a, int b)
{
   return a + b;
}

int resta(int a, int b)
{
   return a - b;
}

int multiplicar(int a, int b)
{
   return a * b;
}

int dividir(int a, int b)
{
   return a / b;
}


//Aquí son todas variables globales para poder facilitar lo máximo posible los datos de cálculo
int tester;
char cadena[10];
int test2 = 3;

int main(int a, int b)
{
   
   while (test2 == 3)
   {
   std::cout << "\n" << "Introduce la operación que quieres realizar:";
   std::cin >> cadena;
   tester = strlen(cadena);
   std::cout << "\n" << "Introduce el primer elemento: ";
   std::cin >> a;
   std::cout << "\n" << "Ahora introduce el segundo elemento: ";
   std::cin >> b;

   
   switch(tester){
   case 5:
      if (cadena[0] == 's')
      {
         tester =suma(a,b);
      }
      else if (cadena[0] == 'r')
      {
         tester =resta(a, b);
      }break;

   case 7:
      tester =dividir(a,b);break;
   case 11:
      tester = multiplicar(a,b);break;
   };
   

   
      std::cout << "\n" << "El resultado de la operacion es: " << tester;
   }

   return 0;
}

El cambio esta en que la condicion de la resta esta ahora en el switch, y asi siempre que ponia "restar" en el programa, me devolvia cualquier cosa, ni siquiera me devolvia una multiplicacion, suma o division, sino cualquier numero, creo que 6 casi siempre o siempre.

-¿Por que pasa esto?
-¿Am, y puedo poner un while sin condicion?¿O si lo quiero infinito sin condicion no me queda otra que el bucle for?

Salu2 y gracias
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #1 en: Febrero 02, 2008, 01:40:32 »

hola, lo que pasa es que "restar" tiene 3 letras xD, y vos pones:
case 5:
blablabla

xD

y para tener un bucle infinito podes poner while(1)

salu2!
En línea

Inside The Source Code



Linux Registred User #460377
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #2 en: Febrero 02, 2008, 03:45:01 »

Muchas gracias Nio, me han servido las dos cosas que me dijiste, fue un descuido mio, lo conte asi rapido y no me di cuenta que tenia 6 letras xD y me creia que tenia 5. Pero creo que tu tambien te acabas de equivocar, has puesto 3 letras xD.

Salu2 y gracias por la respuesta
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
placa4
Habitual
*****
Desconectado Desconectado

Mensajes: 155



Ver Perfil
« Respuesta #3 en: Febrero 02, 2008, 03:55:38 »

Bueno, ya la he retocado, ahora tiene una funcion de salir y todo xD.

Code:


//test para dar uso a las funciones de la libreria de c String

#include <iostream>
#include <cstring>

int suma(int a, int b)
{
   return a + b;
}

int resta(int a, int b)
{
   return a - b;
}

int multiplicar(int a, int b)
{
   return a * b;
}

int dividir(int a, int b)
{
   return a / b;
}


//Aquí son todas variables globales para poder facilitar lo máximo posible los datos de cálculo
int tester;
char cadena[10];

int main(int a, int b)
{
   std::cout << "Calculadora v2.0";
   while (1)
   {
   std::cout << "\n" << "Introduce la operacion que quieres realizar:";
   std::cin >> cadena;
   tester = strlen(cadena);
   if (cadena[3] == 'i')
   {
      return 1;
   }
   std::cout << "\n" << "Introduce el primer elemento: ";
   std::cin >> a;
   std::cout << "\n" << "Ahora introduce el segundo elemento: ";
   std::cin >> b;

   
   switch(tester){

   case 5:
      tester =suma(a,b);break;
   case 6:
      tester =resta(a, b);break;
   case 7:
      tester =dividir(a,b);break;
   case 11:
      tester = multiplicar(a,b);break;
   };
     
   std::cout << "\n" << "El resultado de la operacion es: " << tester;
   
   }

   return 0;
}

   
Salu2 y gracias Nio Wink
En línea

El futuro está en versión Beta.

La aleatoriedad no existe, sólo una complejidad tan extrema que el ser humano es aún incapaz de comprenderla.
Ni0
Gran Colaborador
*****
Desconectado Desconectado

Mensajes: 1357


Ni0-inside the source code

Ni0@el-hacker.org
Ver Perfil WWW Email
« Respuesta #4 en: Febrero 02, 2008, 03:59:53 »

de nada.

lo raro fue que conte 6 pero escribi 3 xD

salu2!
En línea

Inside The Source Code



Linux Registred User #460377
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: De nuevo una calculadora. Condiciones con string.h « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC