구구단을 만들어 보면서 for 반복문과 if 조건문, 그리고 인쇄시 오른쪽 정렬, 가운데 정렬 등 정렬, 공백 추가 등을 알아보겠습니다. 간단한 것인데도 Rust가 다른 언어와 다르다는 것을 다시 한번 더 느꼈습니다.
1. 구구단 만들기(실패)
fn main() {
let mut i:i32;
let mut j:i32;
for i in 2..=9 {
for j in 1..=9 {
println!("{} * {} = {}",i,j,i*j) ;
}
}
}
위와 같이
let mut i:i32;
let mut j:i32;
라고 하니 warning: unused variable: i와 j 경고가 발생합니다.
그러나, 결과는 아래와 같이 잘 표시됩니다.

다시 말해 for 반복문에서 변수 i와 j를 사용하면 별도로 변수 선언이 필요하지 않다는 것을 알 수 있습니다.
그리고, for 반복문에서는 변수 앞에 mut를 붙이지 않아도 된다는 것을 알 수 있습니다.
오히려 mut를 붙여서 for mut i in 2..=9 {라고 하면
warning: variable does not need to be mutable라는 경고가 발생합니다.
2. 구구단 만들기(부분 성공)
let 문 2개를 지우고 실행하니
fn main() {
for i in 2..=9 {
for j in 1..=9 {
println!("{} * {} = {}",i,j,i*j) ;
}
}
}
아래와 같이 출력결과가 잘 표시됩니다. 그러나, 2 * 1 = 2에서 결과값 2가 오른쪽 정렬이 되면 좋겠습니다.

3. 구구단 만들기(성공)
이럴 때 사용할 수 있는 것이 표시될 너비를 지정하는 것으로
{:2}라고 지정하면 됩니다.
따라서 코드는 아래와 같습니다.
fn main() {
for i in 2..=9 {
for j in 1..=9 {
println!("{} * {} = {:2}",i,j,i*j) ;
}
}
}
출력 결과가 아래와 같이 깔끔합니다.

4. 구구단 한 줄에 3개씩 표시하기
i를 3칸씩 떨어져서 실행하고,
결과 표시를 i, i+1, i+2를 이용해 표시하는데, 중간에 공백 10칸을 넣은 후 i+1과 i+2를 오른쪽 정렬로 넣기 위해 {:>10}이라고 하면 됩니다.
오른쪽 정렬은 >, 왼쪽 정렬은 <, 가운데 정렬은 ^를 사용합니다.
완성된 코드는 아래와 같습니다.
fn main() {
for i in (2..=9).step_by(3) {
for j in 1..=9 {
println!("{} * {} = {:2}{:>10} * {} = {:2}{:>10} * {} = {:2}",
i,j,i*j, i+1,j,(i+1)*j, i+2,j,(i+2)*j);
}
}
}
출력된 결과는 아래와 같습니다.

5. 구구단이 한 단이 끝난 다음 공백 2줄 추가하기
공백 2줄을 추가하기 위해
print!(“\n\n”) ;
또는
println!();
println!();
을 사용합니다.
전체 코드는 아래와 같습니다.
fn main() {
for i in (2..=9).step_by(3) {
for j in 1..=9 {
println!("{} * {} = {:2}{:>10} * {} = {:2}{:>10} * {} = {:2}",
i,j,i*j, i+1,j,(i+1)*j, i+2,j,(i+2)*j);
}
print!("\n\n");
}
}
6. 구구단 명 표시하기(실패)
구구단명을 표시하려면 구구단명을 가운데 정렬(^사용)로 표시하고, 단 이름과 단 이름사이에 공백을 10개 추가해야 한다고 생각했는데, 8로 해야 제대로 보입니다. 따라서 {:>8}로 하고 값이 없으므로 “”,를 추가했습니다.
완성된 코드는 아래와 같고
fn main() {
for i in (2..=9).step_by(3) {
println!("{:^10}{:8}{:^10}{:8}{:^10}",
i.to_string()+"단","",
(i+1).to_string()+"단","",
(i+2).to_string()+"단");
for j in 1..=9 {
println!("{} * {} = {:2}{:>10} * {} = {:2}{:>10} * {} = {:2}",
i,j,i*j, i+1,j,(i+1)*j, i+2,j,(i+2)*j);
}
println!();
println!();
}
}
결과는 아래와 같습니다. 9단까지 표시돼야 하는데, 3개씩 표시하다 보니 10단까지 표시됐습니다.

7. 구구단 명 표시하기(성공)
10단이면, 다시 말해 (i+2)가 9보다 크면 인쇄하지 않고, 9이하일 때만 인쇄해야 하므로 아래와 같이 if 문을 사용해야 합니다.
fn main() {
for i in (2..=9).step_by(3) {
if (i+2) <= 9 {
println!("{:^10}{:8}{:^10}{:8}{:^10}",
i.to_string()+"단","",
(i+1).to_string()+"단","",
(i+2).to_string()+"단");
for j in 1..=9 {
println!("{} * {} = {:2}{:>10} * {} = {:2}{:>10} * {} = {:2}",
i,j,i*j, i+1,j,(i+1)*j, i+2,j,(i+2)*j);
}
} else {
println!("{:^10}{:8}{:^10}",
i.to_string()+"단","",
(i+1).to_string()+"단");
for j in 1..=9 {
println!("{} * {} = {:2}{:>10} * {} = {:2}",
i,j,i*j, i+1,j,(i+1)*j);
}
}
println!();
println!();
}
}
9단까지만 잘 표시됐습니다.
