第二章 控制台输入输出

          第二章   控制台输入输出

 

译自 《TangoRefMan_Sep_1_2008.odt


通常,在tango中有四种输出到控制台的方法:
1.C Print  (不推荐使用,仅用于运行时追踪问题)。
2.Cout/Cerr ,有最少的附属物并且结果是最少二进制代码,但不支持格式化输出,仅支持UTF-8.
3.Stdout/Stderr,标准的控制台格式化输出,Tango的Print。
4.Trace,Stderr的同步版本,同时输出几个不同线程的内容。

 

 

 

 

 Cout,Cerr


    通过Cout或Cerr在控制台显示文本,有最少的附属物,它们是tango.io.Console中预定义的实体,接受char[],把它们恰当地输出到设备中。如:


import tango.io.Console;
Cout("now is the time for all good men to come to the aid of their country").newline
;

 

    注意有一个newline修饰符附加在后。它的作用相当于传统用法的\n词法,在文本中嵌入行中断。控制台输出被缓冲,如果没有newline,文本将不能立即发送到目的地。如果使用输出行中断不合适,可以使用立即冲洗的方法:


Cout ("now is the time for all good men to come to the aid of their country").flush;


控制台方法支持如下形式的连锁引用:


char [] people = "women";
Cout ("now is the time for all good")(people)("to come to the aid of their country").newline;


    注意所有的参数是char[],并且用简单的从左到右的顺序发布,一个简单的flush标志是一个空参数。如:


Cout ("What is your name ?")();


    对象引用也能传送到cout :


auto o = new object;
Cout ("the name of Object is")(o).newline;


    Cout 允许使用潜在的流实例用法,如快捷的复制一个文本文件到控制台可以使用如下形式:


auto file= new File("myfile");
Cout.stream.copy(file);


    类似的,我们可以从一个网站复制原生内容到控制台(使用路径/index.html):


auto site = new SocketConduit;
site.connect(new InternetAddress("mywebsite")).write("GET/index.html HTTP/1.0\n\n");
cout.stream.copy(site);


    控制台输入使用相似的方法,使用预定义实体Cin,tango等候一些输入完成,然后把它们全部返回给调用者。交互用法,这是一个典型的输入行(延迟到CR銉被按下):


Cout("What  is your name?")();
auto name = Cin.get();
Cout ("Hello")(name).newline;

 

 


 Cin


    Cin是应用程序的输入流,这个流来自控制台用户的输入,通常是面向行的。即,操作系统通常等候用户按下Enter键然后传送整个一行内容给应用程序。如果应用程序想改变按下的键或改成其它特定的键组合,则应该使用C函数(导入tango.stdc).
Cin能加上readln读取一个输入行,返回一个内部缓冲器的一个切片,或加上copyln以返回一个复制品。


控制台异常


当操作系统底层确定一个错误发生时抛出一个IO异常。

 

Stdout, Stderr

另见我的博文《Stdout使用》

 

 Trace


当跟踪一个程序的运行时,我们常需要输出其运行状态。Stdout/Stderr/Cout/Cerr不适合做这件事,并且它们不是线程安全的,当需要从几个不同的线程一致地输出时使用Trace,以达到同步的目的。如:


import tango.util.log.Trace;
//……
int idx = someCalc();
Trace.formatln("{}@{}: my variale = {}",_FILE_,_LINE_,idx);
//.……
}


 C Print


和所有标准C函数一样,Printf是可用的,使用它要导入tango.io.stdio模块。


import tango.io.stdio;
Printf("at pos %lld,%.*s\n",_LINE_,_FILE_);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值