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

while (letra = getchar() && 1) //¿Error?

Estas en el tema de while (letra = getchar() && 1) //¿Error? en el foro de C/C++ en Foros del Web. Hola a todos. Estoy intentando aprender C/C++, y me he encontrado con algo curioso que no comprendo. Parto de este código de ejemplo: Código: #include ...
  #1 (permalink)  
Antiguo 03/12/2006, 13:42
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
while (letra = getchar() && 1) //¿Error?

Hola a todos.

Estoy intentando aprender C/C++, y me he encontrado con algo curioso que no comprendo.

Parto de este código de ejemplo:
Código:
#include <stdio.h>
int main(){
	char letra;
	while (letra = getchar()){
		putchar(letra);
	}
	return 0;
}
Este programa lee el teclado y, cuando pulses intro, imprime la línea que has escrito, y vuelve a ponerse a leer el teclado.

Bien, pues me he puesto a probar cosas con la sintaxis de C y transformo el código así:
Código:
int main(){
	char letra;
	while (letra = getchar() && 1){
		putchar(letra);
	}
	return 0;
}
Y se produce algún error... se compila perfectamente y sin avisos, pero por alguna extraña razón ya no funciona como debería: Al pulsar intro me imprime una fila de cuadrados (en Linux, en Windows una fila de caritas sonrientes) del mismo tamaño de lo que yo haya escrito...

Me gustaría saber dónde está el problema, ya que yo pensaba que letra tomaría el valor devuelto por getchar, y esta (con su nuevo valor) sería comprobada como un true && true que pasaría a ejecutar el putchar con el valor de letra...

¿Dónde está el problema?

Gracias por vuestro tiempo.
  #2 (permalink)  
Antiguo 03/12/2006, 14:05
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Parentesis; con tu codigo estas dandole a letra el resultado de comparar getchar con 1, osea true (1).

Código:
while ( (letra = getchar()) && 1){
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 03/12/2006, 14:13
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 18 años, 4 meses
Puntos: 1
Que error más estúpido por mi parte... pensaba que el igual tenía mayor preferencia que el and...

¡Gracias!
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




La zona horaria es GMT -6. Ahora son las 11:35.