#io #cpp #cout #cin

cinner

C++ style std input and std output with cin and cout

3 releases

0.1.2 Dec 14, 2022
0.1.1 Nov 30, 2022
0.1.0 Nov 29, 2022

#87 in #cpp


Used in file_filler

MIT license

4KB

Cinner (pronounced "Sinner") is an utility to write I/O operation in C++ style

It features C++ like style for cin and cout



Why?

  • Because I'm bored of writing std::io::stdin().read_line(&mut holder).trim().parse::<T>() and println!("{}", <variable>) all the time

  • Because I didn't find any other library that does this

  • Because I didn't have anything to do

  • Because I'm a C++ programmer I like C++ style

Also, I wanted to learn more "advanced" Rust lmao

I learnt:

  • Operator overloading with traits (I'm still not sure if I did it right)

  • The importance of .trim() (I forgot to add it in the first version and it took >5hrs to find the bug)

  • Using trait bounds in generic functions

  • Variadics (they're so cool)

  • Publishing crates to crates.io

Usage

  • Add cinner = "<version-no>" to your Cargo.toml file

You can use:

use cinner::{cin, cout};

fn main(){
    let mut i = 0;
    let _ = cin >> &mut i;
    let _ = cout << i << "\n";
}

As opposed to:

fn main(){
    let mut holder = String::new();
    let i = std::io::stdin().read_line(&mut holder).trim().parse::<i32>().unwrap();
    println!("{}", i);
}

Also it's recursive, so you can do:

use cinner::{cin, cout};

fn main(){
    let mut i = 0;
    let mut j = 0_f32;
    let _ = cin >> &mut i >> &mut j;
    let _ = cout << i << "\n";
}

If you have any suggestions, DCDA

Updates

  • Cinner now supports "endl" functionality

© 2022 Sarad (Chronos Ltd.)

No runtime deps