开发者

Simple for loop not working [closed]

开发者 https://www.devze.com 2023-01-15 02:25 出处:网络
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time,or an extraordinarily narrow situation that is not generally applic
This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center. Closed 9 years ago.

I've just started learning programming. I'm studying for loops but this program does not work as expected. I want to break the loop when $a is equal to 3 so that I get the output 1 2 but I get 3 as output :(

for($a=0;$a<开发者_StackOverflow中文版10;++$a)
{
       if($a==3)
               break
       print"$a ";
}

Please help.


Missing semi-colon after break


It's rather interesting to know why your program behaves the way it does.

The general syntax of break in PHP is:

break Expression;

The expression is optional, but if present its value tells how many nested enclosing structures are to be broken out of.

break 0; and break 1; are same as break;

Your code is equivalent to

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

Now the print function in PHP always return 1. Hence it is equivalent to

if($a==3)
       break 1;

so when $a is 3 you print its value and break.

It's advisable to use braces to enclose the body of a conditional or a loop even if the body has a single statement. In this case enclosing the if body in braces:

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

would have given a syntax error: PHP expects a ; but finds a }

All of the above applies to the PHP continue as well. So the program

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

also prints 3 for a similar reason.


You are missing a semicolon at the end of break. ;)

And even with the semicolon it will not work as you'd expect it to since it will count from 0 to 2. You have to write it like this to get only 1 2.

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

Note $a is now one in the for loop initialization.

EDIT: Another thing I've noticed which you should be aware of. In your for loop control you have a pre-increment (++$a). That basically means that PHP increments the value of $a and then returns $a. Another option is the post-increment ($a++) where $a gets returned and then gets incremented by one.

In your case both ways will get you the correct output tho.

This sometimes is pretty important. Just keep that in mind.


As codaddict said, you are missing the semi-colon after break.

Your code should look like:

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


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

@Downvoters: What's wrong aside from me being laconic?


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


Use echo in place of print.

0

精彩评论

暂无评论...
验证码 换一张
取 消