2010-09-05 10 views
16

Acabo de empezar a aprender programación. Estoy estudiando para bucles, pero este programa no funciona como se esperaba. Quiero romper el bucle cuando $a es igual a 3 de modo que consiga la salida 1 2 pero me da como salida 3 :(Simple para el bucle no funciona

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
       break 
     print"$a "; 
} 

por favor ayuda.

+13

Este es un buen ejemplo para apoyar el argumento de usar siempre llaves. Con ellos, obtendrías un error de sintaxis. bmb

+0

+1 para usar llaves. –

+0

@bmb: + para las llaves. Lo he agregado a mi respuesta. – codaddict

Respuesta

41

Missing punto y coma después debreak


Es bastante interesante saber por qué su programa se comporta de la manera que lo hace.

La sintaxis general de break en PHP es:

break Expression; 

La expresión es opcional, pero si está presente su valor indica cuántas anidada estructuras de cerramiento son para romperse fuera de.

break 0; y break 1; son los mismos que break;

Su código es equivalente a

if($a==3) 
     break print"$a "; 

Ahora la función print en PHP siempre vuelven 1. Por lo tanto es equivalente a

if($a==3) 
     break 1; 

así que cuando $a es 3 imprime su valor y descanso.

Es aconsejable utilizar llaves para encerrar el cuerpo de un condicional o un bucle, incluso si el cuerpo tiene una sola declaración. En este caso encierra el cuerpo if entre llaves:

if($a==3) { 
    break 
} 
print"$a "; 

habría dado un error de sintaxis: PHP espera una ; pero encuentra una }

Todo lo anterior se aplica a la PHP continue también. Así que el programa

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
       continue 
     print"$a "; 
} 

también imprime 3 por una razón similar.

+1

¡Qué persecución es la persecución! – erisco

+2

En realidad, no lo sabía. +1 – Cam

3
for($a=0;$a<10;++$a) 
{ 
     if($a==3) break; 
     print $a; 
} 

@Downvoters: ¿Qué hay de malo aparte de ser lacónico?

+0

no es el votante a la baja, pero ese otro es redundante –

4

Como dijo codaddict, te falta el punto y coma después del descanso.

El código debería parecerse a:

for($a=0;$a<10;++$a) 
{ 
     if($a==3) 
      break; 
     echo $a, ' '; 
} 
+0

@Downvoters cuál fue el problema con eso ... – judda

+0

No es el infractor, pero el problema del OP es que * no * obtiene un error de sintaxis. – bmb

19

Usted se echa en falta un punto y coma al final de descanso.;)

E incluso con el punto y coma no funcionará como usted esperaría, ya que contará desde 0 hasta 2. Tienes que escribirlo así para obtener solo 1 2.

<?php 
for($a=1;$a<10;++$a) 
{ 
    if($a==3) 
      break; 
    print"$a "; 
} 
?> 

Nota $ a es ahora uno en la inicialización de bucle for.

EDIT: Otra cosa que he notado que debe tener en cuenta. En su control for loop tiene un preincremento (++$a). Eso básicamente significa que PHP incrementa el valor de $a y luego devuelve $a. Otra opción es el incremento posterior ($a++) donde $a se devuelve y luego se incrementa en uno.

En su caso, en ambos sentidos obtendrá la salida correcta aunque.

Esto a veces es bastante importante. Solo ten eso en cuenta.

0
for($a=0;$a<10;$a++) { 
    if($a==3) { exit; } 
    else { echo $a; } 
} 
+0

Usar 'exit' probablemente no sea la idea correcta, seguir con 'break' hubiera sido mejor. –