[RESUELTO, AHORA VARIANTES]Hola, tengo un ligero problema

Iniciado por alex030293, 27 Abril 2011, 16:40 PM

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

leogtz

Mira, has declarado la función main como int main(), entonces debes retornar un entero, es por eso que debes de usar la sentencia return. Cuando retornamos algo en la función main() le estamos avisando a nuestro sistema operativo cómo finalizó nuestro programa. Ejemplo:

tres.c:
#include <stdio.h>

int main(void)
{
   int x = 23;
   /* Supongamos que no debe de dar 23 la comprobación
   si da 23 es que algo hubo mal y salimos insatisfactoriamente del programa */
   if(x == 23)
   return 1;
   return 0;
}


Cuando ejecuto y compruebo cómo salió mi programa:


┌─[0 leo@archero ~/c_proyects]$
└─> ./tres; echo $?
1
┌─[0 leo@archero ~/c_proyects]$
└─>


Fijate que me devolvió un 1, esto es porque en nuestro programa algo salió mal.

┌─[0 leo@archero ~/c_proyects]$
└─> ./tres && echo -e "Todo bien" || echo -e "Algo salió mal"
Algo salió mal
┌─[0 leo@archero ~/c_proyects]$
└─>


Es por eso que es importante retornar algo, retornar el diagnóstico de nuestro programa.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

satu

Y si quieres que cuando el programa acabe espere a que presiones una tecla utiliza getchar() que sí es estándar.

Saludos
Breakbeat como forma de vida

alex030293

vale, entonces meto siempre return 0; al final de todo como medida "formal".

Por otro lado, habia leido lo de getchar(); pero no me hace lo mismo que getch() por algun motivo, se cierra sola al acabar.
www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.

Samael.Black

Cita de: alex030293 en 27 Abril 2011, 20:30 PM
vale, entonces meto siempre return 0; al final de todo como medida "formal".

Por otro lado, habia leido lo de getchar(); pero no me hace lo mismo que getch() por algun motivo, se cierra sola al acabar.
utiliza la libreria stdlib.h y la funcion system("pause") es estandar y pausa el programa que es lo que quieres...

y el return como dijieron se deve de poner pues la funcion main la estas declarando como int main() lo cual al finalizar estas diciendo que tendra un valor de retorno...

y pues te recomiendo repasar la informacion que has estudiado y centrarte en los distintos tipos de datos que puedes manejar (int, char, float, bool, double,etc)...

leogtz

Lo recomendable es limpiar el buffer y utilizar getchar() o fgetc(stdin) para pausar el programa. Si utilizas system("pause") no funcionaría en otros sistemas operativos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

xassiz~

Y de todas formas no hace falta, algo tan sencillo se acaba antes llamando desde la consola.

alex030293

Bien, ahora que ya repasé algunos conceptos, y este programa va sin problema, voy a intentar algo diferente.

Alguien sabe la forma de hacer lo mismo, solo que en vez de introducir coeficiente por coeficiente, el usuario escriba la ecuación directamente (pej: 2x^2+4x-3=0)??

Gracias de antemano.
www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.

Acermax

Bueno, por ejemplo, podrías leer la expresión, y luago tratarla caracter a caracter. Por ejemplo, se me ocurre  guardar la ecuación en un array de tamaño variable (podrías usar la clase vector de stl para esto, que es muy útil), en la que en la posición 0 del vector guardas el termino independiente, en la posición 1 el termino de grado 1 etc...
También piensa que en realidad no tienes que tratar de manera especial que sea una suma o una resta, simplemente puedes guardar en el array el vector cambiado de signo o no, y con el término o términos de la derecha de la igualdad lo mismo, solo tendrías que cambiarles el signo para luego operar fácilmente...

PD: Vale veo que solo pretendes hacerlo para ecuaciones de segundo grado, asi que lo tienes más fácil si quieres, no necesitas ni crear un "vector" de stl, puedes hacerlo con variables directamente o con un array fijo de 3 posiciones.

alex030293

Cita de: Acermax en 29 Abril 2011, 19:10 PM
Bueno, por ejemplo, podrías leer la expresión, y luago tratarla caracter a caracter. Por ejemplo, se me ocurre  guardar la ecuación en un array de tamaño variable (podrías usar la clase vector de stl para esto, que es muy útil), en la que en la posición 0 del vector guardas el termino independiente, en la posición 1 el termino de grado 1 etc...
También piensa que en realidad no tienes que tratar de manera especial que sea una suma o una resta, simplemente puedes guardar en el array el vector cambiado de signo o no, y con el término o términos de la derecha de la igualdad lo mismo, solo tendrías que cambiarles el signo para luego operar fácilmente...

PD: Vale veo que solo pretendes hacerlo para ecuaciones de segundo grado, asi que lo tienes más fácil si quieres, no necesitas ni crear un "vector" de stl, puedes hacerlo con variables directamente o con un array fijo de 3 posiciones.

Me parece una buena idea. Pero me la apunto para más adelanto, porque llevo tres días con C/C++ y aún no llegue a los arrays. Cuando controle un poco eso pruebo.

Gracias de todos modos
www.flickr.com/photos/alex030293

Mi equipo: Intel i7 955 @4.0GHz + Nvidia GTX 460 + Nvidia 9800GT para Physx + 12Gb RAM DDR3 1600 Mghz + HDD Seagate Barracuda + Themaltake ProWater 850i.

xassiz~

Me temo que no podrás leer una expresión así si no tienes conocimientos sobre arrays por lo menos ;D