fn main() {
// loop: infinite, break with optional value
let mut i = 0;
let result = loop {
i += 1;
if i == 10 { break i * 2; }
};
println!("loop result: {}", result); // 20
// while: condition-based
let mut n = 5;
while n > 0 { print!("{} ", n); n -= 1; }
println!();
// for: iterator-based (most common)
for i in 0..5 { print!("{} ", i); } // 0 1 2 3 4
println!();
for i in 0..=5 { print!("{} ", i); } // 0 1 2 3 4 5
println!();
for i in (0..10).step_by(2) { print!("{} ", i); } // 0 2 4 6 8
println!();
for i in (0..5).rev() { print!("{} ", i); } // 4 3 2 1 0
println!();
// enumerate
let fruits = ["apple", "banana", "cherry"];
for (i, fruit) in fruits.iter().enumerate() {
println!("{}: {}", i, fruit);
}
// Loop labels for nested loops
'outer: for i in 0..5 {
for j in 0..5 {
if i + j > 5 { break 'outer; }
print!("({},{}) ", i, j);
}
}
println!();
// while let
let mut stack = vec![1, 2, 3];
while let Some(top) = stack.pop() { print!("{} ", top); }
println!();
}