2016-06-01 31 views
4

我在Windows 10上使用了Rust 1.9。在播放一些代碼並比較從標準輸出中捕獲的結果時,我注意到輸出使用了一個以0x0A(10,LF)結尾的Linux行,而不是windows 0x0D 0x0A(13 10,CR LF)。我嘗試以下:有沒有辦法強制打印!/ println!使用Windows新行(CR LF)

println!("{} or {} = {}", a, b, a | b); 

print!("{} or {} = {}\n", a, b, a | b); 

有沒有辦法強制Windows行結束?

+2

對'打印任何東西(」! {}或{} = {} \ r \ n「,a,b,a | b);'? – Kroltan

+1

'println!'宏[不會對環境進行任何檢查](https://github.com/rust-lang/rust/blob/master/src/libstd/macros.rs#L118)新的線不幸。所以似乎沒有一個標誌可以讓你按照預期工作。我會說如上所述手動調用'print!'是你最好的選擇。 –

+0

是的\ r \ n的竅門。謝謝,我應該想到這一點。請讓它成爲答案,我會接受它。 –

回答

7

如果你看看the implementation of println!,這是相當直接:

macro_rules! println { 
    ($fmt:expr) => (print!(concat!($fmt, "\n"))); 
    ($fmt:expr, $($arg:tt)*) => (print!(concat!($fmt, "\n"), $($arg)*)); 
} 

您可以複製粘貼,修改此來代替\n\r\n

macro_rules! wprintln { 
    ($fmt:expr) => (print!(concat!($fmt, "\r\n"))); 
    ($fmt:expr, $($arg:tt)*) => (print!(concat!($fmt, "\r\n"), $($arg)*)); 
} 
+4

你知道這是有意的還是不是?我完全可以想象一個'cfg'屬性來切換'println'的實現,但我似乎回想起一個討論,其中特定於平臺的行爲被視爲可移植性問題的來源...... –

+0

@MatthieuM。可悲的是,我不知道任何討論。我個人更喜歡跨平臺有單一的行爲。 – Shepmaster

相關問題