2016-06-01 73 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

相关问题