Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - exel

#41
Hola

He visto el codigo y tengo las siguientes observaciones:

Citar
Utilizas mucho la funcion getchar() innecesariamente, especialmente al final del codigo

He encontrado muchos errores ortograficos

OTROS ERRORES:
linea 44; la opcion 1 y 2 son las mismas. La opcion 1 es de metros a pies
linea 55; no abuses de la funcion para limpiar la pantalla
linea 160,172,184,196; si solo sumas numeros enteros, para que utilizas una variable float como refult
linea 196; que sucede si la variable b es igual a cero
linea 248; deberia ser goto a5, y no goto a4
linea 252; linea innecesaria

Para que goto? Linea 27-29. No deberias usar goto para saltar de un cuerpo de seleccion o iteracion a otro. No es aconsejable utilizar goto dentro de switch: el goto deberia ir debajo del case
Por ultimo te aconsejo no utilizar goto porque dicha funcionalidad vuelve innentendible cualquier codigo y es considerado una mala practica.

Para los puristas en C es preferible utlizar if y no switch.

Para que utilizar tantas variables opc1,opc2,opc3,opc4 si al final cumplen la misma funcion.

n y n2 cumplen escencialmente la misma funcion.

foot,in y resul cumplen escencialmente la misma funcion. Sin embargo son variables float innecesariamente, y si fueran variablen int entonces la variable res tambian cumpliria la misma funcion.

En el cuerpo de cualquier funcion, iteracion, o seleccion no deberia haber mas codigo depues de invocar a exit(0) ya que no se ejecuta y por lo tanto es innecesario; observa al final del codigo.

Es conveniente que te acostumbres a identar el codigo; cuanto mas lineas tenga, mas confuso sera entenderlo sin perderse.

En cuanto al tema de la contraseña existen muchas formas de aplicar la solucion dependiendo del nivel de proteccion que quieras dar; la mas sencilla es esta: strcmp()




//ejemplo de uso de strcmp() de la biblioteca estandar "string.h" para comparar dos cadenas

char pass[MAX_CHAR];

...

printf("Introduzca password: ");
fgets(pass,MAX_CHAR,stdin);

if(strcmp(pass,"batman es mi vecino")==0)
{
//contraseña verdadera
}else
{
//contraseña falsa
}
#42
Hola

El problema que planteas es ya un clasico entre los aprendices de C. La situacion es que como dijiste, scanf() con %s solo lee una cadena hasta el espacio, mientras que por otro lado fgets() o gets() leen la cadena hasta el salto de linea ('\n'). Pero la pregunta es: ¿donde se almacena esta cadena antes de ser transferida por scanf(),gets() o fgets()?; pues la respuesta es un buffer llamado stdin el cual sigue almacenando caracteres no leidos por las funciones mensionadas. Por lo tanto es necesario vaciar este buffer antes de ser utilizado otra vez por estas funciones o cualquier otra que intente leer de stdin.

No lo he probado, pero creo que esta bien la modificacion que he realizado de tu codigo:


#include <stdio.h>

void vaciar_buffer();

int main()
{
   FILE *archivo;

   char nombretxt[256], mensaje[256];
   int opc;

   do
    {
        printf("Ingrese una opcion...\n");

        printf("\n1. Crear o anadir al archivo");
        printf("\n2. Crear o sobreescribir archivo");
        printf("\n3. Salir\n\n");

        scanf("%d", &opc);

        switch (opc)
        {

            case 1:

               printf("\nIngrese el nombre del archivo que desea crear o al que desea añadirle un mensaje: ");
               
               vaciar_stdin();
               fgets(nombretxt, sizeof(nombretxt), stdin)

               archivo = fopen(nombretxt, "a");

               if (archivo != NULL)
                   printf("\nArchivo creado con exito");
               else
                   printf("\nAh ocurrido un error en la creacion del archivo");

               printf("\n\nIngrese el mensaje que dese grabar en el archivo de texto: ");
               
               vaciar_stdin();
               fgets(mensaje, sizeof(mensaje), stdin)

               fputs(mensaje, archivo);

               fclose(archivo);

               break;

           case 2:

               printf("\nIngrese el nombre del archivo que desea crear o sobrescribir: ");
               
               vaciar_stdin();                
               fgets(nombretxt, sizeof(nombretxt), stdin)

               archivo = fopen(nombretxt, "w");

               if (archivo != NULL)
                   printf("\nArchivo creado con exito");
               else
                   printf("\nAh ocurrido un error en la creacion del archivo");

               printf("\n\nIngrese el mensaje que dese grabar en el archivo de texto: ");
               
               vaciar_stdin();                
               fgets(mensaje, sizeof(mensaje), stdin)

               fputs(mensaje, archivo);

               fclose(archivo);

               break;

           case 3:

               printf("\nSaliendo del programa...");
               break;

           default:

               printf("\nNo es una opcion valida");
               break;
        }

        vaciar_stdin();
        printf("\n");

   } while (opc != 3);

   return 0;
}




void vaciar_stdin(){

    while (getc(stdin) != EOF)
       ;

}



Podrias utilizar la funcion fflush(stdin) para limpiar el buffer de entrada(stdin), sin embargo a mi me gusta este procedimiento de resolucion.

Como stdin es considerado como un fichero, EOF es lo que devuelve getc() en caso de que el buffer stdin este vacio.

Saludos
#43
Hola

El Warning que muestra el compilador es una advertencia; esto sucede porque la variable y es un entero mientras que lo que devuelve tu funcion floor es un valor de punto flotante, entonces el compilador se ve obligado a truncar el valor que devuelve tu funcion para asignarlo a y.

Existen muchas maneras de resolver la situacion. Yo propongo la siguiente solucion:


#include<stdio.h>

int floor(float);

int main(){
   float x;
   int y;

   printf("\nAdd: ");
   scanf("%f", &x);

   y = floor(x);

   printf("\nValues is: %d", y);
}

int floor(float value){
   if(value >= 0)
      return (int)(value + 0.5);
   else
      return (int)(value - 0.5);
}
#44
Desarrollo Web / Re: ¿Aprender javascript?
16 Abril 2012, 14:21 PM
 Tal y como dijeron arriba.

Algo que ya deberías saber es que te verás obligado a aprender métodos de seguridad cuando trabajes con bases de datos y lenguajes del lado del servidor como PHP. PHP tambien tiene su lado oscuro
#45
Cuando cursé arquitectura de computadores había visto el tema pero ya no recuerdo nada jeje.

Viendo en wikipedia: http://es.wikipedia.org/wiki/Flip_flop, noto que el tipo D puede ser activo por nivel alto o activo por flanco de subida. Pero además exite un tipo de flip-flop JK considerado obsoleto que se denomina "J-K Flip-Flop Master-Slave".
#46
GNU/Linux / Re: Ayuda?
16 Abril 2012, 00:22 AM
Buscando en google puedes encontrar miles de referencias para empezar desde cero con sistemas Linux.

Dependiendo de tus objetivos, puedes empezar con ubuntu por si nunca estuviste en contacto con otro SO que no sea windows. Pero si quieres conocer la realidad y eres entusiasta entonces cualquier distro es adecuada, sin embargo debes tener minimos conocimientos de como trabajar con el disco duro, configurar una conexion a red, y administracion de usuarios y la linea de comandos (que es a lo que la mayoria le teme).

Una buena referencia para comenzar con ubuntu es la wiki no-oficial: http://www.guia-ubuntu.org/index.php?title=Portada
#47
Hola. Este mensaje como duda va dirigida hacia los todo-poderosos señores de este sitio;

Al recorrer la wiki, que por cierto me parece una muy buena iniciativa, he notado que no posee un sistema de revisión y ni siquiera un contacto a donde sea posible eviar sugerencias, fallas o errores encontrados en los textos que son extraidos del foro al wiki.

La duda que ya fue inducida surgió porque mientras estaba intentando iniciarme en la programacion en PHP me tope con un error en la explicación resumida del parecido con otros lenguajes en su sintaxis de asignacion de variables con  operadores; por ejemplo:

$a -= $b   Le resta $a a $b

http://wiki.elhacker.net/programacion/php/manual-php-para-principiantes

... esta afirmación no es correcta ya que $a -= $b es equivalente a $a= $a-$b segun recuerdo como tendria q suceder en otros lenguajes como C.

Quisás este equivocado con respecto a todo el comentario anterior pues esa es otra duda por la que espero respuestas.

Saludos