Foros del Web » Programación para mayores de 30 ;) » C/C++ »

No entiendo este programa

Estas en el tema de No entiendo este programa en el foro de C/C++ en Foros del Web. Se supone que este programa copia la entrada a la salida. Lo que escribas se va a volver a mostrar. Código PHP: #include <stdio.h> main () { ...
  #1 (permalink)  
Antiguo 12/04/2006, 15:01
Usuario baneado!
 
Fecha de Ingreso: abril-2006
Mensajes: 1
Antigüedad: 18 años, 1 mes
Puntos: 0
No entiendo este programa

Se supone que este programa copia la entrada a la salida. Lo que escribas se va a volver a mostrar.

Código PHP:
#include <stdio.h>

main() {
       
int c;
       
       
getchar();
       while(
!= EOF) {
               
putchar(c);     
               
getchar();
               }
       } 

Vamos por el while, que es donde no entiendo.

while(c != EOF) {
putchar(c);
c = getchar();
}



¿Qué significa EOF? Sí, End Of File, pero ¿qué tendría que escribir o hacer para que termine el while? o ¿a qué equivale EOF?
¿Porqué se repite la asignación c = getchar();?
  #2 (permalink)  
Antiguo 12/04/2006, 15:07
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
1. Significa como dices, EOF. Es el valor de los ficheros de texto que determina cuando se ha terminado el susodicho fichero, o en este caso, de la entrada del usuario.

2. No has entendido el bucle. Traducido al castellano, es:

Mientras "c" no sea el final del fichero (EOF), imprimir C, y coger el siguiente caracter.

Es decir, imprime el caracter si no es EOF, luego coge el siguiente, vuelve a mirar si es EOF, y si no es, vuelve a imprimirlo y a coger otro, etc.

¿Por qué está repetido? Porque tendrá que coger el primero si quiere saber si es EOF. En realidad, el código es malillo, debería ser:

Código:
int main()
{
	while(putchar(getchar())!=EOF);
}
Que significa: Imprimir el cararcter cogido, y si no es EOF, repetir.

¡Qué capacidad de síntesis en C! ¡Eh!

Me gustaría ver por aquí a [EX3] del subforo de VB6, el que decía que con VB6 los códigos son mucho más cortos que en C.
  #3 (permalink)  
Antiguo 12/04/2006, 15:18
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Cita:
Iniciado por MaxExtreme
Me gustaría ver por aquí a [EX3] del subforo de VB6, el que decía que con VB6 los códigos son mucho más cortos que en C.
Tal vez se refería a que colocas códigos con menos líneas en vb6 que con C por lo mismo que ya muchas cosas están hechas... pero donde si estoy de acuerdo es que por ejemplo si haces un sistema en vb.net y otro en c#, obviamente en c# tu código puede quedar mucho mas pequeño que el de vb.net a pesar de que con los 2 puedes hacer lo mismo...

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #4 (permalink)  
Antiguo 12/04/2006, 15:20
Usuario baneado!
 
Fecha de Ingreso: abril-2006
Mensajes: 3
Antigüedad: 18 años, 1 mes
Puntos: 0
Ok. Solo que sigo sin entender lo de EOF. [Parezco idiota]

¿Cuándo va a finalizar la ejecución? Yo puedo simplemente apretar enter y me lo copia (""), exit igual.. no hay otra forma de que finalice el programa si no es cerrando la ventana.
  #5 (permalink)  
Antiguo 12/04/2006, 15:22
Usuario baneado!
 
Fecha de Ingreso: abril-2006
Mensajes: 3
Antigüedad: 18 años, 1 mes
Puntos: 0
Cita:
Iniciado por MaxExtreme
En realidad, el código es malillo, debería ser:.
Pero... ahora estoy en el libro. Así que es culpa de Dennis. jajaja
  #6 (permalink)  
Antiguo 12/04/2006, 15:36
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por X.Cyclop_
Ok. Solo que sigo sin entender lo de EOF. [Parezco idiota]

¿Cuándo va a finalizar la ejecución? Yo puedo simplemente apretar enter y me lo copia (""), exit igual.. no hay otra forma de que finalice el programa si no es cerrando la ventana.
Claro, lo copiará hasta que le pulses la combinación de teclas adecuada que signifique EOF.

Busca en Google cuál es esa combinación de teclas. Algo como Control+...
  #7 (permalink)  
Antiguo 12/04/2006, 15:37
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por X.Cyclop_
Pero... ahora estoy en el libro. Así que es culpa de Dennis. jajaja
Bueno ellos tratan de hacerlo legible para el novato, pero no quiere decir que escriban tal código :)
  #8 (permalink)  
Antiguo 12/04/2006, 21:02
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
Cita:
Iniciado por RootK
Tal vez se refería a que colocas códigos con menos líneas en vb6 que con C por lo mismo que ya muchas cosas están hechas... pero donde si estoy de acuerdo es que por ejemplo si haces un sistema en vb.net y otro en c#, obviamente en c# tu código puede quedar mucho mas pequeño que el de vb.net a pesar de que con los 2 puedes hacer lo mismo...
Cierto, pero el no entendía la diferencia entre librería y lenguaje.

En C/C++/C# hay librerías para hacer lo que hace VB6/VB.Net.

Pero la sintaxis VB es muy estricta, mientras que la de los "C" es muy flexible. Cosas como éstas son majísimas:

1. int i=0; while(array[i++]);
2. return wrapper->getParentClass().Kill()?wrapper->status.Good:wrapper->status.Error;
3. while(*z++!='\n');
4. Debug("hola el numero de la suerte es " << 5*n << std::endl);
5. Array<int,100> mi_array;

Que significan:

1. Buscar el primer no-cero del array guardando su posición en "i".
2. Matar usando la función de la clase base del objeto apuntado por wrapper. Si ha salido bien, devolver un valor de correcto, sino, uno de error.
3. Llegar hasta el primer '\n'
4. Poder usar "funciones" que tengan parámetros que sean código, no variables/referencias/punteros. (Usando #define)
5. Tener clases instanciadas en tiempo de compilación, no en ejecución, con el consiguiente aumento de rendimiento y evasión de errores y excepciones.


Y que no me digan que son "complicadas" porque se usan constantemente, además, que son de lo más básico que se usa en la programación C++ real.

Si alguien ve complicado o se ha tenido que parar a pensar esas líneas, es que no sabe programar fluidamente en C++.

Ahora, que [EX3] transforme alguna de esas 5 líneas en algo similar en VB6.

Última edición por MaxExtreme; 12/04/2006 a las 21:11
  #9 (permalink)  
Antiguo 12/04/2006, 21:16
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 6 meses
Puntos: 52
Jeje. Bueno. Solo quiero hacerle una recomendacion a X.Cyclop.
Ese libro de C que tienes es malo, a pesar que es de los creadores de C, no es un libro bueno para empezar. Solo sirve como referencia, para acordarte de las cosas. Y el apendice de las funciones estandar esta bastante bien, pero en si el libro es malo.

Yo comence con C en 24 horas, me gusto porque empeiza por el principio y va aumentando de nivel poco a poco, a parte todos sus codigos de ejemplo vienen con "que pasaria si", es decir, te ponen ahi mismo lo que saldria en la consola, y porque. Aparte de que vienen ejercicios bastante buenos. En el que tienes, la verdad tambien venen ejercicios buenos, tal vez deberias utilizar esos ejercicios, pero nada mas.

Ese ejemplo que mencionas, tambien a mi me causo problemas, no entendia que pasaba. Pero ya despues logre comprender bien que significaba cada instruccion. Intenta cambiar de libro si tus posibilidades te lo permiten, yo con gusto te prestaria el de C en 24 horas, pero ya esta prestado

Es solo un consejo. Saludos
  #10 (permalink)  
Antiguo 12/04/2006, 21:55
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 1 mes
Puntos: 17
TCPL es un un libro de aprendizaje, pero para programadores/universitarios, no para novatos. Es lo que es un libro de estudio, no un tutorial como el de Gronka.

En cambio, TC++PL es más de referencia como tu dices.
  #11 (permalink)  
Antiguo 19/03/2010, 12:28
 
Fecha de Ingreso: marzo-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: No entiendo este programa

Cita:
Iniciado por X.Cyclop_ Ver Mensaje
Ok. Solo que sigo sin entender lo de EOF. [Parezco idiota]

¿Cuándo va a finalizar la ejecución? Yo puedo simplemente apretar enter y me lo copia (""), exit igual.. no hay otra forma de que finalice el programa si no es cerrando la ventana.
Hola muy buenas tardes, veo que estas en probema por lo de "EOF", es muy sencillo, EOF en windows es igual a la tecla Ctrl+z, lo que quiere decir que hasta que no presiones Ctrl+z no termina el programa, pruebalo, espero te sirva es muy sencillo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:27.