Problem set translation form C to rust. I’m using the code I had from 2014 and implementing rust equivalent as a learning exercises. the firs C program is very simple classic ‘Hello World’ followed by rust ‘hello world’.

The example below that is about parsing command line user input and printing a pyramid based on that input. Although I can think of many ways to improve the code and user interaction but I chose to just copy exactly the same functionality for new rust code.

// C
#include <stdio.h>
int main(void) {
    printf("hello, world\n");
    return 0;
}
// Rust
fn main() {
    println!("Hello World!");
}
/* pest1 mario.c */

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    /* declare height */
    int height= 0;
    do
    {
        /* get height from the user */
        printf("Height: ");
        /* using cs50 helper function */
        height = GetInt();
    } while ((height < 0) || (height > 23));
    
    /* loop through the given height */
    for (int i = 2; i < height + 2; i++)
    {
        /* print necessary space characters */
        for (int j = height - i; j >= 0; j--)
        {
            printf(" ");
        }
        /* print the pyramid with # characters */
        for (int k = 0; k < i; k++)
        {
            printf("#");
        }
        /* start a new line */
        printf("\n");

    }

    return 0;
}
use std::io;
use std::io::Write;

fn main() {
    loop {
        print!("Height: ");
        io::stdout().flush().unwrap();

        let mut height = String::new();
        io::stdin()
            .read_line(&mut height)
            .expect("Failed to read line");
        let height: u32 = match height.trim().parse() {
            Ok(num) => {
                if num < 23 {
                    num
                } else {
                    continue;
                }
            }
            Err(_) => {
                continue;
            }
        };

        print_mario_grid(height);
        break;
    }
}

fn print_mario_grid(height: u32) {
    for i in 2..height + 2 {
        let j = height - i;
        for _ in (0..j).rev() {
            print!(" ");
        }
        for _ in 0..i {
            print!("#");
        }
        print!("\n");
    }
}