[Curso] Introducción a la programación en C (V)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (V)

Mensaje por m0skit0 »

Está perfecto. Nunca hay demasiado comentarios ;)

Por cierto, system("read foo") no te funcionará en Windows, por tanto no sólo con cambiar las cabeceras funcionaría. Además en Linux te sobra esa línea, y así de paso quitas también unistd.h, con lo que ya funcionaría en cualquier sistema que soporte C estándar.

Esto es un poco avanzado, pero si te interesa crear código que compile para varias plataformas, mírate #ifdef y directivas similares, que permiten incluír o no trozos de código dependiendo de variables de pre-procesado.
Imagen

Avatar de Usuario
amras5584
Experto
Experto
Mensajes: 628
Registrado: 04 Oct 2009, 15:56
Ubicación: Casal, Paraíso Tropical!!!!

Re: [Curso] Introducción a la programación en C (V)

Mensaje por amras5584 »

ok, versión final entonces:
Spoiler:

Código: Seleccionar todo

// Incluímos o ficheiro stdio.h
#include <stdio.h>

//Función principal:
int main(int argc, char *argv[])
{
  //Definimos como float para poder facer operacións
  float cifra1;
  float cifra2;
 
  printf("Por favor, a primeira cifra: ");
  //Lemos a primeira cifra
  //Indicamos como en printf() %f por ser un número de coma flotante e a variable á que asignar o teclado precedida dun &
  scanf("%f", &cifra1);
  printf("Agora a segunda cifra: ");
  //Lemos a segunda cifra, do mesmo xeito que a primeira
  scanf("%f", &cifra2);
 
  printf("As cantidades que introduciu son: %.0f e %.0f\n", cifra1, cifra2);
  printf("A suma das dúas cantidades é: %.0f\n", cifra1 + cifra2);
  printf("O produto das dúas cantidades é: %.0f\n", cifra1 * cifra2);
  printf("O promedio das dúas cantidades é: %.2f\n", (cifra1 + cifra2) / 2);
 
  return 0;
}

y qué hace exactamente "read foo"?? no es lo de esperar por la tecla Enter?? cómo se pondría en Windows??
Usuario nº 13 del antiguo foro de Dark_AleX (alabado sea)

Ahora que se han desvelado las Keys de Sony, la Scene ha SUPERDIGIEVOLUCIONADO!!

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (V)

Mensaje por m0skit0 »

amras5584 escribió:y qué hace exactamente "read foo"?? no es lo de esperar por la tecla Enter??

Nop, lee la entrada estándar al fichero foo. En Windows es "pause". Lo mejor es no usar system().

PD: system() se usa para ejecutar comandos como si fuera la consola.

Saludos.
Imagen

JeFNDZ
Habitual
Habitual
Mensajes: 378
Registrado: 11 Sep 2009, 06:44

Re: [Curso] Introducción a la programación en C (V)

Mensaje por JeFNDZ »

m0skit0 escribió:Está perfecto. Nunca hay demasiado comentarios.


En mi sincera opinión demasiados comentarios solo alargan el código(empeorando la legibilidad) por eso lo mejor es poner nombre significativos a las variables y funciones (aunque claro apenas estamos empezando :| ).

@amaras5584: Disculpa lo que dije del idioma es que no soy de por allá y no lo conocía :tongue: ...

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (V)

Mensaje por m0skit0 »

JeFNDZ escribió:En mi sincera opinión demasiados comentarios solo alargan el código(empeorando la legibilidad)

Los comentarios NO empeoran la legibilidad puesto que precisamente la mejoran. De todas formas cada uno pone los comentarios que le dé la gana. Y obviamente apechuga con ello cuando no entienda ni lo que él mismo escribió (cuando te pase, me lo comentas :lol: ).

Imagen
Imagen

Avatar de Usuario
amras5584
Experto
Experto
Mensajes: 628
Registrado: 04 Oct 2009, 15:56
Ubicación: Casal, Paraíso Tropical!!!!

Re: [Curso] Introducción a la programación en C (V)

Mensaje por amras5584 »

jejeje, muy buenas las viñetas. precisamente yo empecé a usar los comentarios porque cuando fui a repasar unos xml con código php no entendía una mierda de para qué servía cada cosa. ahora al leer los comentarios ya lo tengo todo claro, xD.
Usuario nº 13 del antiguo foro de Dark_AleX (alabado sea)

Ahora que se han desvelado las Keys de Sony, la Scene ha SUPERDIGIEVOLUCIONADO!!

JeFNDZ
Habitual
Habitual
Mensajes: 378
Registrado: 11 Sep 2009, 06:44

Re: [Curso] Introducción a la programación en C (V)

Mensaje por JeFNDZ »

:lol: :lol:

t4t4n_h4ck
Novato
Novato
Mensajes: 13
Registrado: 09 Sep 2011, 03:24

Re: [Curso] Introducción a la programación en C (V)

Mensaje por t4t4n_h4ck »

Saludos, aqui mi practica espero todo este bien

Código: Seleccionar todo

//incluyendo las librerias a usar
#include <stdio.h>
#include <windows.h> // es para windows
/*
#include <unistd.h> // esto es para linux
*/
//funcion principal
int main(int argc, char *argv[])
{
 //declarando las variables para las edades
 int edad1,edad2;
 //declarando variables para las operaciones
 int suma,resta,multiplicacion;
 float media;
 //asignando valores a las edades desde el teclado
 //mensaje para capturar la edad 1
 printf("Ingrese La Edad 1: ");
 //capturando la edad 1
 scanf("%d",&edad1);
 //mensaje para capturar la edad 2
 printf("Ingrese La Edad 2: ");
 //capturando la edad 2
 scanf("%d",&edad2);
 //limpiando ventana
 system("cls");//limpiar consola en windows
 //hallando la suma de las edades
 suma=edad1 + edad2;
 //hallando la resta de las edades
 resta=edad1 - edad2;
 //hallando la multiplicacion de las edades
 multiplicacion=edad1 * edad2;
 //hallando la media de las edades
 media=(edad1 + edad2)/2.0;
 //mostrado lo pedido
 printf("Mostrando Informacion pedida...\n\n");
 printf("Suma de las edades...%d \n",suma);
 fflush(0);
 sleep(2000);
 printf("Resta de las edades...%d \n",resta);
 fflush(0);
 sleep(2000);
 printf("multiplicacion de las edades...%d \n",multiplicacion);
 fflush(0);
 sleep(2000);
 printf("Media de las edades...%.2f \n",media);
 fflush(0);
 sleep(2000);
 system("pause");//sin esta linea para linux
 return 0;
 
}



Espero los comentarios para poder seguir gracias... bueno continuare con el curso.

Avatar de Usuario
Yn$an€
Desarrollador
Desarrollador
Mensajes: 258
Registrado: 11 Feb 2011, 21:44

Re: [Curso] Introducción a la programación en C (V)

Mensaje por Yn$an€ »

Te dejo esta lista de consideraciones relacionadas con el uso de fflush, en inglés, pero creeme que merecen ser vistas con detalle, ya que mucha gente no sabe como usar correctamente la función. Es un recopilatorio que he hecho para la ocasión, y creo que casi se merece un post a parte explicándolo; como soy perezoso te dejo a ti descubrir los motivos por los que tu programa no es correcto. Y si te animas pos te dejo escribir ese tutorial :lol: .

  • For output streams, fflush() forces a write of all user-space buffered data for the given output or update stream via the stream's underlying write function. For input streams, fflush() discards any buffered data that has been fetched from the underlying file, but has not been by the application.
  • The open status of the stream is unaffected.
  • For input streams, the behaviour is undefined.
  • In files open for update (i.e., open for both reading and writting), the stream shall be flushed after an output operation before performing an input operation. This can be done either by repositioning (fseek, fsetpos, rewind) or by calling explicitly fflush.
  • If the stream argument is NULL, fflush() flushes all open output streams.
  • A "fflush" operation on a disk file involves a fair amount of overhead. Therefore you should not flush disk files explicitly unless the nature of the application makes it necessary (for example, if you need to flush log files to make sure they remain valid in the event of a system crash).
  • A "fflush" operation on a terminal also costs significant overhead, unless there is no output waiting to go to the terminal. You should generally avoid explicit flush operations on terminals, since it might make you lose input. For example, you should definitely NOT write code of the form

    Código: Seleccionar todo

    printf("Prompt: ");
    fflush(stdout);
    gets(s);

    The reason is that input to the terminal is discarded unless there is an outstanding read request from the program. Since the flush operation takes place between the "printf" and the "gets", any input received after the prompt but before the "gets" is simply discarded. It is much safer to write

    Código: Seleccionar todo

    printf("Prompt: ");
    gets(s);

    and let the implicit output-flushing routines handle everything for you.
  • A call to "sleep" automatically flushes buffered output to all terminals. Contrast this with

    Código: Seleccionar todo

    fflush(NULL);

    which flushes buffered output to all output streams, whether or not they're terminals.

Interesante, verdad? Y digo que es importante porque en miles de sitios sigue recomendándose utilizar fflush() erróneamente.
Espero que te sea de ayuda.
... after all, we're all alike.

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (V)

Mensaje por m0skit0 »

Aparte de lo correctamente apuntado por Yn$an€, me gustaría que formatearas tu código para que simplemente pueda leerlo ;)
Imagen

Responder